TaskProcessManagement.vue 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455
  1. <template>
  2. <div class="container-fluid">
  3. <Navbar title="任务管理" :is-go-back="false" />
  4. <a-button type="primary" @click="showDrawer"> 创建任务 </a-button>
  5. <a-button type="dashed" style="margin-left: 8px" @click="loadTaskTemplate">
  6. 加载任务模板
  7. </a-button>
  8. <a-drawer
  9. v-model:visible="visible"
  10. class="custom-class"
  11. :title="taskDefineDto.id == null ? '创建任务' : '编辑任务'"
  12. placement="right"
  13. width="650"
  14. >
  15. <div id="myTabContent" class="tab-content">
  16. <div v-if="step == 1" class="panel panel-default">
  17. <div class="panel-heading">
  18. <h3 class="panel-title">
  19. <b>1.基本配置</b>
  20. </h3>
  21. </div>
  22. <div class="panel-body">
  23. <form class="form-horizontal" role="form">
  24. <div class="form-group">
  25. <label for="firstname" class="col-sm-2 control-label">
  26. <font color="red">*</font>名称
  27. </label>
  28. <div class="col-sm-10">
  29. <input
  30. id="firstname"
  31. v-model="taskDefineDto.taskName"
  32. autocomplete="off"
  33. type="text"
  34. class="form-control"
  35. placeholder="请输入任务名称"
  36. />
  37. </div>
  38. </div>
  39. <div class="form-group">
  40. <label for="lastname" class="col-sm-2 control-label">
  41. <font color="red">*</font>描述
  42. </label>
  43. <div class="col-sm-10">
  44. <input
  45. id="lastname"
  46. v-model="taskDefineDto.taskDescription"
  47. autocomplete="off"
  48. type="text"
  49. class="form-control"
  50. placeholder="请填写任务描述"
  51. />
  52. </div>
  53. </div>
  54. <div class="form-group">
  55. <label for="lastname" class="col-sm-2 control-label">
  56. <font color="red">*</font>任务类型
  57. </label>
  58. <div class="col-sm-10">
  59. <v-select
  60. v-model="taskDefineDto.selectedTaskType"
  61. :options="taskTypes"
  62. :label="'value'"
  63. placeholder="请选择任务类型"
  64. />
  65. </div>
  66. </div>
  67. <div
  68. v-if="
  69. taskDefineDto.selectedTaskType &&
  70. taskDefineDto.selectedTaskType.value == '流程'
  71. "
  72. class="form-group"
  73. >
  74. <label for="lastname" class="col-sm-2 control-label">
  75. <font color="red">*</font>流程编号
  76. </label>
  77. <div class="col-sm-10">
  78. <a-select
  79. v-model:value="taskDefineDto.processNo"
  80. :options="processNos"
  81. style="width: 100%"
  82. @change="processNoChang"
  83. />
  84. </div>
  85. </div>
  86. <div
  87. v-if="
  88. taskDefineDto.selectedTaskType &&
  89. taskDefineDto.selectedTaskType.value == '流程'
  90. "
  91. class="form-group"
  92. >
  93. <label for="lastname" class="col-sm-2 control-label">
  94. <font color="red">*</font>流程参数
  95. </label>
  96. <div class="col-sm-10" style="margin-bottom: 6px" />
  97. <div
  98. class="col-sm-10"
  99. style="margin-left: 100px; margin-bottom: 70px"
  100. >
  101. <a-table
  102. :columns="processColumns"
  103. :data-source="processDatas"
  104. :pagination="false"
  105. >
  106. <template #bodyCell="{ column, record }">
  107. <template v-if="column.dataIndex === 'defaultValue'">
  108. <EditTableCell
  109. :record="record"
  110. :param-name="'defaultValue'"
  111. :control-type="'input'"
  112. @change-all="tableDataChange"
  113. />
  114. </template>
  115. </template>
  116. </a-table>
  117. </div>
  118. </div>
  119. <div
  120. v-if="
  121. taskDefineDto.selectedTaskType != null &&
  122. taskDefineDto.selectedTaskType.value == '流程报表'
  123. "
  124. class="form-group"
  125. >
  126. <label for="lastname" class="col-sm-2 control-label">
  127. <font color="red">*</font>流程报表文件编码
  128. </label>
  129. <div class="col-sm-10">
  130. <input
  131. id="lastname"
  132. v-model="taskDefineDto.processReportNo"
  133. autocomplete="off"
  134. type="text"
  135. class="form-control"
  136. placeholder="请填写流程报表文件编码"
  137. />
  138. </div>
  139. </div>
  140. <div
  141. v-if="
  142. taskDefineDto.selectedTaskType != null &&
  143. taskDefineDto.selectedTaskType.value == '流程报表'
  144. "
  145. class="form-group"
  146. >
  147. <label for="lastname" class="col-sm-2 control-label">
  148. <font color="red">*</font>流程报表名称
  149. </label>
  150. <div class="col-sm-10">
  151. <input
  152. id="lastname"
  153. v-model="taskDefineDto.processReportName"
  154. autocomplete="off"
  155. type="text"
  156. class="form-control"
  157. placeholder="请填写流程报表名称"
  158. />
  159. </div>
  160. </div>
  161. <div
  162. v-if="
  163. taskDefineDto.selectedTaskType != null &&
  164. taskDefineDto.selectedTaskType.value == 'HTTP任务'
  165. "
  166. class="form-group"
  167. >
  168. <label for="lastname" class="col-sm-2 control-label">
  169. <font color="red">*</font>HTTP请求类型
  170. </label>
  171. <div class="col-sm-10">
  172. <v-select
  173. v-model="taskDefineDto.selectedRequestType"
  174. :options="requestTypes"
  175. :label="'value'"
  176. placeholder="请选择HTTP请求类型"
  177. />
  178. </div>
  179. </div>
  180. <div
  181. v-if="
  182. taskDefineDto.selectedTaskType != null &&
  183. taskDefineDto.selectedTaskType.value == 'HTTP任务'
  184. "
  185. class="form-group"
  186. >
  187. <label for="lastname" class="col-sm-2 control-label">
  188. <font color="red">*</font>HTTP请求地址
  189. </label>
  190. <div class="col-sm-10">
  191. <input
  192. id="lastname"
  193. v-model="taskDefineDto.httpRequestUrl"
  194. autocomplete="off"
  195. type="text"
  196. class="form-control"
  197. placeholder="请填写HTTP请求地址"
  198. />
  199. </div>
  200. </div>
  201. <div
  202. v-if="
  203. taskDefineDto.selectedTaskType != null &&
  204. taskDefineDto.selectedTaskType.value == 'HTTP任务'
  205. "
  206. class="form-group"
  207. >
  208. <label for="lastname" class="col-sm-2 control-label">HTTP参数(json)</label>
  209. <div class="col-sm-10">
  210. <input
  211. id="lastname"
  212. v-model="taskDefineDto.httpRequestParam"
  213. autocomplete="off"
  214. type="text"
  215. class="form-control"
  216. placeholder="请填写HTTP参数"
  217. />
  218. </div>
  219. </div>
  220. <div
  221. v-if="
  222. taskDefineDto.selectedTaskType &&
  223. taskDefineDto.selectedTaskType.value !== '流程'
  224. "
  225. class="form-group"
  226. >
  227. <label for="lastname" class="col-sm-2 control-label">接收人</label>
  228. <div class="col-sm-10">
  229. <v-select
  230. v-model="taskDefineDto.selectedUser"
  231. :options="users"
  232. multiple
  233. :label="'value'"
  234. placeholder="请选择接收人"
  235. />
  236. </div>
  237. </div>
  238. <div
  239. v-if="
  240. taskDefineDto.selectedTaskType &&
  241. taskDefineDto.selectedTaskType.value !== '流程'
  242. "
  243. class="form-group"
  244. >
  245. <label for="lastname" class="col-sm-2 control-label">接收用户组</label>
  246. <div class="col-sm-10">
  247. <v-select
  248. v-model="taskDefineDto.selectedGroup"
  249. :options="groups"
  250. multiple
  251. :label="'value'"
  252. placeholder="请选择接收用户组"
  253. />
  254. </div>
  255. </div>
  256. </form>
  257. </div>
  258. <div class="panel-footer">
  259. <ul class="pager" style="margin: 5px 0">
  260. <li>
  261. <a class="pull-right" @click="saveCheck">下一步</a>
  262. </li>
  263. </ul>
  264. </div>
  265. </div>
  266. <div v-if="step == 2" class="panel panel-default">
  267. <div class="panel-heading">
  268. <h3 class="panel-title">
  269. <b>2.定时配置</b>
  270. </h3>
  271. </div>
  272. <div class="panel-body">
  273. <form class="form-horizontal" role="form">
  274. <div class="form-group">
  275. <label for="lastname" class="col-sm-2 control-label">
  276. <font color="red">*</font>时间类型
  277. </label>
  278. <div class="col-sm-10">
  279. <v-select
  280. v-model="taskDefineDto.selectedTimeType"
  281. :options="timeTypes"
  282. :label="'value'"
  283. placeholder="请选择时间类型"
  284. />
  285. </div>
  286. </div>
  287. <div
  288. v-if="
  289. taskDefineDto.selectedTimeType != null &&
  290. taskDefineDto.selectedTimeType.value == 'cron'
  291. "
  292. class="form-group"
  293. >
  294. <label for="cron" class="col-sm-2 control-label">
  295. <font color="red">*</font>cron表达式
  296. </label>
  297. <div class="col-sm-10">
  298. <input
  299. v-model="taskDefineDto.cron"
  300. autocomplete="off"
  301. type="text"
  302. class="form-control"
  303. placeholder="请填写cron表达式"
  304. />
  305. </div>
  306. </div>
  307. </form>
  308. </div>
  309. <div class="panel-footer">
  310. <ul class="pager" style="margin: 5px 0">
  311. <li>
  312. <a class="pull-left" @click="step = step - 1">上一步</a>
  313. </li>
  314. <li>
  315. <a class="pull-right" @click="saveCheck">下一步</a>
  316. </li>
  317. </ul>
  318. </div>
  319. </div>
  320. <div v-if="step == 3" class="panel panel-default">
  321. <div class="panel-heading">
  322. <h3 class="panel-title">
  323. <b>3.报警配置</b>
  324. </h3>
  325. </div>
  326. <div class="panel-body">
  327. <form class="form-horizontal" role="form">
  328. <div class="form-group">
  329. <label for="firstname" class="col-sm-2 control-label">
  330. <font color="red">*</font>超时报警
  331. </label>
  332. <div class="col-sm-10">
  333. <Switches
  334. v-model="taskDefineDto.timeoutAlarm"
  335. :selected="taskDefineDto.timeoutAlarm"
  336. :show-text="false"
  337. style="width: 50px"
  338. color="green"
  339. type-bold="true"
  340. />
  341. </div>
  342. </div>
  343. <div class="form-group">
  344. <label for="lastname" class="col-sm-2 control-label">超时时间</label>
  345. <div class="col-sm-10">
  346. <input
  347. id="lastname"
  348. v-model="taskDefineDto.timeout"
  349. autocomplete="off"
  350. type="number"
  351. class="form-control"
  352. placeholder="超时时间(s),默认2小时"
  353. />
  354. </div>
  355. </div>
  356. <div class="form-group">
  357. <label for="lastname" class="col-sm-2 control-label">
  358. <font color="red">*</font>超时终止
  359. </label>
  360. <div class="col-sm-10">
  361. <Switches
  362. v-model="taskDefineDto.timeoutTermination"
  363. :selected="taskDefineDto.timeoutTermination"
  364. :show-text="false"
  365. style="width: 50px"
  366. color="green"
  367. type-bold="true"
  368. />
  369. </div>
  370. </div>
  371. <div class="form-group">
  372. <label for="firstname" class="col-sm-2 control-label">
  373. <font color="red">*</font>失败报警
  374. </label>
  375. <div class="col-sm-10">
  376. <Switches
  377. v-model="taskDefineDto.failureAlarm"
  378. :selected="taskDefineDto.failureAlarm"
  379. :show-text="false"
  380. style="width: 50px"
  381. color="green"
  382. type-bold="true"
  383. />
  384. </div>
  385. </div>
  386. <div class="form-group">
  387. <label for="lastname" class="col-sm-2 control-label">报警联系人</label>
  388. <div class="col-sm-10">
  389. <v-select
  390. v-model="taskDefineDto.selectedAlarmUser"
  391. :options="users"
  392. multiple
  393. :label="'value'"
  394. placeholder="请选择报警联系人"
  395. />
  396. </div>
  397. </div>
  398. </form>
  399. </div>
  400. <div class="panel-footer">
  401. <ul class="pager" style="margin: 5px 0">
  402. <li>
  403. <a class="pull-left" @click="step = step - 1">上一步</a>
  404. </li>
  405. <li>
  406. <a class="pull-right" @click="saveCheck">下一步</a>
  407. </li>
  408. </ul>
  409. </div>
  410. </div>
  411. <div v-if="step == 4" class="panel panel-default">
  412. <div class="panel-heading">
  413. <h3 class="panel-title">
  414. <b>4.其他配置</b>
  415. </h3>
  416. </div>
  417. <div class="panel-body">
  418. <form class="form-horizontal" role="form">
  419. <div class="form-group">
  420. <label for="firstname" class="col-sm-2 control-label">状态</label>
  421. <div class="col-sm-10">
  422. <v-select
  423. v-model="taskDefineDto.selectedStatus"
  424. :options="status"
  425. :label="'value'"
  426. placeholder="请设置任务状态"
  427. />
  428. </div>
  429. </div>
  430. </form>
  431. </div>
  432. <div class="panel-footer">
  433. <ul class="pager" style="margin: 5px 0">
  434. <li>
  435. <a class="pull-left" @click="step = step - 1">上一步</a>
  436. </li>
  437. <li>
  438. <a class="pull-right" @click="saveCheck">保存</a>
  439. </li>
  440. </ul>
  441. </div>
  442. </div>
  443. </div>
  444. </a-drawer>
  445. <CommonTable
  446. :total="pagination.total"
  447. :columns="columns"
  448. :data-source="taskDefineDtos"
  449. @get-page="getPageParams"
  450. >
  451. <template #bodyCell="{ column, record }">
  452. <template v-if="column.key == 'taskType'">
  453. {{
  454. record.taskType == null
  455. ? ""
  456. : record.taskType == "HTTP"
  457. ? "HTTP"
  458. : record.taskType == "PROCESS"
  459. ? "流程"
  460. : "流程报表"
  461. }}
  462. </template>
  463. <template v-if="column.key == 'receiveUserNames'">
  464. {{
  465. record.receiveUserNames != null &&
  466. record.receiveUserNames.length > 0
  467. ? record.receiveUserNames.join(",")
  468. : ""
  469. }}
  470. </template>
  471. <template v-if="column.key == 'receiveGroupNames'">
  472. {{
  473. record.receiveGroupNames != null &&
  474. record.receiveUserNames.length > 0
  475. ? record.receiveGroupNames.join(",")
  476. : ""
  477. }}
  478. </template>
  479. <template v-if="column.key == 'taskStatus'">
  480. {{ record.taskStatus == "ENABLE" ? "启用" : "禁用" }}
  481. </template>
  482. <template v-if="column.key == 'operation'">
  483. <a-button
  484. v-if="record.taskStatus == 'DISABLE'"
  485. :size="size"
  486. @click="updateStatus(record, 'ENABLE')"
  487. >
  488. 启用
  489. </a-button>
  490. <a-button
  491. v-if="record.taskStatus == 'ENABLE'"
  492. :size="size"
  493. @click="updateStatus(record, 'DISABLE')"
  494. >
  495. 禁用
  496. </a-button>
  497. <a-button type="primary" :size="size" @click="edit(record)">
  498. 编辑
  499. </a-button>
  500. <a-button
  501. type="danger"
  502. :size="size"
  503. @click="deleteTaskBefore(record)"
  504. >
  505. 删除
  506. </a-button>
  507. <a-button
  508. v-if="record.taskType != 'HTTP' && record.taskType != 'PROCESS'"
  509. type="dashed"
  510. :size="size"
  511. @click="manualExecutionProcess(record.id)"
  512. >
  513. 执行
  514. </a-button>
  515. </template>
  516. </template>
  517. </CommonTable>
  518. <Modal v-model:show="modal" small="true" @ok="deleteTask">
  519. <template #header> 删除任务提醒 </template>
  520. <div class="container row" style="text-align: center">
  521. 您确认要删除该任务吗?
  522. </div>
  523. </Modal>
  524. <Loading v-if="loading" />
  525. </div>
  526. </template>
  527. <script>
  528. import vSelect from 'vue-select';
  529. import Common from '../common/Common.js';
  530. import TaskDefineResource from '../api/task/TaskDefineResource.js';
  531. import UserResource from '../api/base/UserResource.js';
  532. import GroupResource from '../api/base/GroupResource.js';
  533. import 'vue-select/dist/vue-select.css';
  534. import { Notify, Uuid } from 'pc-component-v3';
  535. import CommonTable from './CommonTable.vue';
  536. import { message } from 'ant-design-vue';
  537. import EditTableCell from './EditTableCell.vue';
  538. export default {
  539. components: {
  540. vSelect,
  541. CommonTable,
  542. EditTableCell,
  543. },
  544. data: function () {
  545. return {
  546. size: 'small',
  547. processColumns: [
  548. {
  549. key: 'name',
  550. title: '全局参数名称',
  551. dataIndex: 'name',
  552. width: 80,
  553. },
  554. {
  555. key: 'defaultValue',
  556. title: '全局参数值',
  557. dataIndex: 'defaultValue',
  558. width: 80,
  559. },
  560. {
  561. key: 'dataType',
  562. title: '全局参数类型',
  563. dataIndex: 'dataType',
  564. width: 80,
  565. },
  566. // {
  567. // title: '操作',
  568. // dataIndex: 'operation',
  569. // key: 'operation',
  570. // width: 60,
  571. // },
  572. ].map(item => ({ ...item, align: 'center' })),
  573. typeOptions: [
  574. {
  575. value: 'java.lang.Boolean',
  576. },
  577. {
  578. value: 'java.lang.Integer',
  579. },
  580. {
  581. value: 'java.lang.Double',
  582. },
  583. {
  584. value: 'java.lang.Long',
  585. },
  586. {
  587. value: 'java.lang.String',
  588. },
  589. ],
  590. processDatas: [],
  591. columns: [
  592. {
  593. title: '序号',
  594. dataIndex: 'index',
  595. key: 'index',
  596. customRender: ({ text, record, index }) => `${index + 1}`,
  597. },
  598. {
  599. title: '任务名',
  600. dataIndex: 'taskName',
  601. key: 'taskName',
  602. },
  603. {
  604. title: '任务描述',
  605. dataIndex: 'taskDescription',
  606. key: 'taskDescription',
  607. },
  608. {
  609. title: '任务类型',
  610. dataIndex: 'taskType',
  611. key: 'taskType',
  612. },
  613. {
  614. title: '生效开始时间',
  615. dataIndex: 'startDate',
  616. key: 'startDate',
  617. },
  618. {
  619. title: '生效结束时间',
  620. dataIndex: 'endDate',
  621. key: 'endDate',
  622. },
  623. {
  624. title: '接收人',
  625. dataIndex: 'receiveUserNames',
  626. key: 'receiveUserNames',
  627. },
  628. {
  629. title: '接收用户组',
  630. dataIndex: 'receiveGroupNames',
  631. key: 'receiveGroupNames',
  632. },
  633. {
  634. title: '状态',
  635. dataIndex: 'taskStatus',
  636. key: 'taskStatus',
  637. },
  638. {
  639. title: '操作',
  640. dataIndex: 'operation',
  641. key: 'operation',
  642. width: 210,
  643. fixed: 'right',
  644. },
  645. ].map(item => ({ ...item, align: 'center' })),
  646. pagination: {
  647. total: 0,
  648. per_page: Common.pageSize, // required
  649. current_page: 1, // required
  650. last_page: 0, // required
  651. },
  652. step: 1,
  653. loading: false,
  654. modal: false,
  655. selectTaskDefineId: null,
  656. taskDefineDto: {
  657. id: null,
  658. taskName: null, //任务名称
  659. taskDescription: null, //任务描述
  660. httpRequestUrl: null, //http请求地址
  661. httpRequestParam: null, //http请求参数
  662. processReportNo: null, //流程报表文件编码
  663. processReportName: null, //流程报表名称
  664. cron: null, //cron表达式
  665. selectedTaskType: null, //选择的任务类型
  666. selectedTimeType: null, //选择的时间类型
  667. selectedRequestType: null, //选择的http请求类型
  668. selectedUser: null, //选择的用户
  669. selectedGroup: null, //选择的用户组
  670. selectedStatus: {
  671. value: '启用',
  672. }, //选择的状态
  673. timeoutAlarm: false, //是否超时报警
  674. timeout: null, //超时时间
  675. timeoutTermination: false, //是否超时终止
  676. failureAlarm: false, //是否失败报警
  677. selectedAlarmUser: null, //选择的报警联系人
  678. processNo: null,
  679. processParam: null,
  680. },
  681. processNos: [],
  682. taskTypes: [
  683. {
  684. value: '流程',
  685. },
  686. {
  687. value: 'HTTP任务',
  688. },
  689. {
  690. value: '流程报表',
  691. },
  692. ],
  693. timeTypes: [
  694. {
  695. value: 'none',
  696. },
  697. {
  698. value: 'cron',
  699. },
  700. ],
  701. requestTypes: [
  702. {
  703. value: 'get',
  704. },
  705. {
  706. value: 'post',
  707. },
  708. ],
  709. users: [],
  710. status: [
  711. {
  712. value: '启用',
  713. },
  714. {
  715. value: '禁用',
  716. },
  717. ],
  718. groups: [],
  719. taskDefineDtos: [], //表格数据
  720. visible: false,
  721. };
  722. },
  723. mounted: function () {
  724. var _self = this;
  725. _self.loadProcess();
  726. _self.getAllUsers();
  727. _self.getAllGroups();
  728. _self.getAllTaskDefineDtos();
  729. $('.fixed-table').tableFixer({
  730. left: 3,
  731. head: true,
  732. });
  733. $('.fixed-table').colResizable({
  734. resizeMode: 'overflow',
  735. partialRefresh: true,
  736. });
  737. },
  738. methods: {
  739. getPageParams: function (start, length) {
  740. this.pagination.current_page = start;
  741. this.pagination.per_page = length;
  742. this.getAllTaskDefineDtos();
  743. },
  744. // 打开编辑或新建抽屉
  745. showDrawer: function () {
  746. var _self = this;
  747. _self.visible = true;
  748. _self.processDatas = [];
  749. _self.restore();
  750. },
  751. // 获取流程编号
  752. loadProcess: function () {
  753. const _self = this;
  754. _self.processNos = [];
  755. $.ajax({
  756. url: Common.getApiURL('ProcessEditResource/list'),
  757. type: 'get',
  758. contentType: 'application/json',
  759. beforeSend: function (request) {
  760. Common.addTokenToRequest(request);
  761. },
  762. success: function (data) {
  763. if (data.errorCode == 0) {
  764. data.datas.forEach(item => {
  765. _self.processNos.push({
  766. value: item.no,
  767. label: item.no + '-' + item.name,
  768. });
  769. });
  770. } else {
  771. message.warning(data.errorMessage);
  772. }
  773. },
  774. error: function (XMLHttpRequest, textStatus, errorThrown) {
  775. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  776. },
  777. });
  778. },
  779. // 流程编号改变获取流程参数
  780. processNoChang: function (value) {
  781. const _self = this;
  782. _self.processDatas = [];
  783. const params = { processNo: value };
  784. $.ajax({
  785. url: Common.getApiURL('ProcessEditResource/uniqueByNo'),
  786. type: 'get',
  787. data: params,
  788. contentType: 'application/json',
  789. beforeSend: function (request) {
  790. Common.addTokenToRequest(request);
  791. },
  792. success: function (data) {
  793. if (data.errorCode == 0) {
  794. if (data.data && data.data.globalProperty) {
  795. let jsonStr = JSON.stringify(data.data);
  796. let datas = JSON.parse(jsonStr);
  797. let globalProperty = JSON.parse(datas.globalProperty);
  798. if(globalProperty.variables && globalProperty.variables.length>0){
  799. _self.processDatas = globalProperty.variables;
  800. }
  801. }
  802. } else {
  803. message.warning(data.errorMessage);
  804. }
  805. },
  806. error: function (XMLHttpRequest, textStatus, errorThrown) {
  807. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  808. },
  809. });
  810. },
  811. // 更新表格数据
  812. tableDataChange: function (record, paramName) {
  813. var _self = this;
  814. var row = _self.deepClone(record.value);
  815. var datas = _self.deepClone(_self.processDatas);
  816. datas.forEach(item => {
  817. if (item.key == row.key) {
  818. item[paramName] = row[paramName];
  819. }
  820. });
  821. _self.processDatas = datas;
  822. },
  823. loadTaskTemplate: function () {
  824. $.ajax({
  825. url: Common.getApiURL('TaskDefineResource/generateTask'),
  826. type: 'get',
  827. contentType: 'application/json',
  828. beforeSend: function (request) {
  829. Common.addTokenToRequest(request);
  830. },
  831. success: function (data) {
  832. if (data.errorCode == 0) {
  833. message.success(data.errorMessage);
  834. } else {
  835. message.warning(data.errorMessage);
  836. }
  837. },
  838. error: function (XMLHttpRequest, textStatus, errorThrown) {
  839. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  840. },
  841. });
  842. },
  843. // changeCron: function (value) {
  844. // var _self = this;
  845. // _self.taskDefineDto.cronExpression = value;
  846. // },
  847. manualExecutionProcess: function (taskDefineId) {
  848. var _self = this;
  849. _self.loading = true;
  850. TaskDefineResource.manualExecutionProcess(taskDefineId).then(
  851. successData => {
  852. _self.loading = false;
  853. if (successData) {
  854. if (successData.errorCode == 0) {
  855. Notify.success('执行成功', successData.errorMessage, false);
  856. } else {
  857. Notify.error('执行失败', successData.errorMessage, false);
  858. }
  859. }
  860. },
  861. errorData => {
  862. _self.loading = false;
  863. Common.processException(errorData);
  864. },
  865. );
  866. },
  867. updateStatus: function (item, status) {
  868. TaskDefineResource.updateStatus(item.id, status).then(
  869. successData => {
  870. if (successData) {
  871. if (successData.errorCode == 0) {
  872. Notify.success('成功', successData.errorMessage, false);
  873. item.taskStatus = status;
  874. } else {
  875. Notify.error('失败', successData.errorMessage, false);
  876. }
  877. }
  878. },
  879. errorData => {
  880. Common.processException(errorData);
  881. },
  882. );
  883. },
  884. deleteTaskBefore: function (item) {
  885. var _self = this;
  886. if (item.taskStatus == 'ENABLE') {
  887. Notify.error('错误', '启用状态下不能删除', false);
  888. return;
  889. }
  890. _self.selectTaskDefineId = item.id;
  891. _self.modal = true;
  892. },
  893. deleteTask: function () {
  894. var _self = this;
  895. _self.modal = false;
  896. TaskDefineResource.deleteTaskDefine(_self.selectTaskDefineId).then(
  897. successData => {
  898. if (successData) {
  899. if (successData.errorCode == 0) {
  900. Notify.success('成功', successData.errorMessage, false);
  901. _self.getAllTaskDefineDtos();
  902. } else {
  903. Notify.error('失败', successData.errorMessage, false);
  904. }
  905. }
  906. },
  907. errorData => {
  908. Common.processException(errorData);
  909. },
  910. );
  911. },
  912. edit: function (item) {
  913. var _self = this;
  914. if (item.taskStatus == 'ENABLE') {
  915. Notify.error('错误', '启用状态下不能对任务进行编辑', false);
  916. return;
  917. }
  918. // console.log(item);
  919. _self.taskDefineDto.id = item.id;
  920. _self.taskDefineDto.taskName = item.taskName;
  921. _self.taskDefineDto.taskDescription = item.taskDescription;
  922. _self.taskDefineDto.httpRequestUrl = item.httpRequestUrl;
  923. _self.taskDefineDto.httpRequestParam = item.httpRequestParam;
  924. _self.taskDefineDto.processReportNo = item.processReportNo;
  925. _self.taskDefineDto.processReportName = item.processReportName;
  926. _self.taskDefineDto.cron = item.cronExpression;
  927. if (item.taskType == 'HTTP') {
  928. _self.taskDefineDto.selectedTaskType = {
  929. value: 'HTTP任务',
  930. };
  931. } else if (item.taskType == 'PROCESS_REPORT') {
  932. _self.taskDefineDto.selectedTaskType = {
  933. value: '流程报表',
  934. };
  935. } else if (item.taskType == 'PROCESS') {
  936. _self.taskDefineDto.processNo = item.processNo;
  937. _self.processDatas = JSON.parse(item.processParam);
  938. _self.taskDefineDto.selectedTaskType = {
  939. value: '流程',
  940. };
  941. }
  942. if (item.taskTimeType == 'NONE') {
  943. _self.taskDefineDto.selectedTimeType = {
  944. value: 'none',
  945. cron: null,
  946. };
  947. item.cronExpression = null;
  948. } else if (item.taskTimeType == 'CRON') {
  949. _self.taskDefineDto.selectedTimeType = {
  950. value: 'cron',
  951. };
  952. }
  953. if (item.httpRequestType == 'GET') {
  954. _self.taskDefineDto.selectedRequestType = {
  955. value: 'get',
  956. };
  957. } else if (item.httpRequestType == 'POST') {
  958. _self.taskDefineDto.selectedRequestType = {
  959. value: 'post',
  960. };
  961. }
  962. if (item.receiveUserIds != null && item.receiveUserIds.length > 0) {
  963. var selectedUsers = [];
  964. for (var i = 0; i < item.receiveUserIds.length; i++) {
  965. var receiveUserId = item.receiveUserIds[i];
  966. var recriveUserName = _self.getUserName(receiveUserId);
  967. var selectedUser = {
  968. id: receiveUserId,
  969. value: recriveUserName,
  970. };
  971. selectedUsers.push(selectedUser);
  972. }
  973. _self.taskDefineDto.selectedUser = selectedUsers;
  974. } else {
  975. _self.taskDefineDto.selectedUser = null;
  976. }
  977. if (item.receiveGroupIds != null && item.receiveGroupIds.length > 0) {
  978. var selectedGroups = [];
  979. for (var j = 0; j < item.receiveGroupIds.length; j++) {
  980. var receiveGroupId = item.receiveGroupIds[j];
  981. var receiveGroupName = _self.getGroupName(receiveGroupId);
  982. var selectedGroup = {
  983. id: receiveGroupId,
  984. value: receiveGroupName,
  985. };
  986. selectedGroups.push(selectedGroup);
  987. }
  988. _self.taskDefineDto.selectedGroup = selectedGroups;
  989. } else {
  990. _self.taskDefineDto.selectedGroup = null;
  991. }
  992. if (item.taskStatus == 'ENABLE') {
  993. _self.taskDefineDto.selectedStatus = {
  994. value: '启用',
  995. };
  996. } else if (item.taskStatus == 'DISABLE') {
  997. _self.taskDefineDto.selectedStatus = {
  998. value: '禁用',
  999. };
  1000. }
  1001. _self.taskDefineDto.timeoutAlarm = item.timeOutAlarm;
  1002. _self.taskDefineDto.timeout = item.timeOut;
  1003. _self.taskDefineDto.timeoutTermination = item.timeoutTermination;
  1004. _self.taskDefineDto.failureAlarm = item.failureAlarm;
  1005. if (item.alarmUserIds != null && item.alarmUserIds.length > 0) {
  1006. var selectedAlarmUsers = [];
  1007. for (var k = 0; k < item.alarmUserIds.length; k++) {
  1008. var alarmUserId = item.alarmUserIds[k];
  1009. var alarmUserName = _self.getUserName(alarmUserId);
  1010. var selectedAlarmUser = {
  1011. id: alarmUserId,
  1012. value: alarmUserName,
  1013. };
  1014. selectedAlarmUsers.push(selectedAlarmUser);
  1015. }
  1016. _self.taskDefineDto.selectedAlarmUser = selectedAlarmUsers;
  1017. } else {
  1018. _self.taskDefineDto.selectedAlarmUser = null;
  1019. }
  1020. _self.visible = true;
  1021. },
  1022. getUserName: function (id) {
  1023. var userName = '';
  1024. var _self = this;
  1025. for (var i = 0; i < _self.users.length; i++) {
  1026. var user = _self.users[i];
  1027. if (user.id == id) {
  1028. userName = user.value;
  1029. break;
  1030. }
  1031. }
  1032. return userName;
  1033. },
  1034. getGroupName: function (id) {
  1035. var groupName = '';
  1036. var _self = this;
  1037. for (var i = 0; i < _self.groups.length; i++) {
  1038. var group = _self.groups[i];
  1039. if (group.id == id) {
  1040. groupName = group.value;
  1041. break;
  1042. }
  1043. }
  1044. return groupName;
  1045. },
  1046. restore: function () {
  1047. var _self = this;
  1048. _self.step = 1;
  1049. _self.selectTaskDefineId = null;
  1050. _self.taskDefineDto = {
  1051. id: null,
  1052. taskName: null, //任务名称
  1053. taskDescription: null, //任务描述
  1054. httpRequestUrl: null, //http请求地址
  1055. httpRequestParam: null, //http请求参数
  1056. processReportNo: null, //流程报表文件编码
  1057. processReportName: null, //流程报表名称
  1058. cron: null, //cron表达式
  1059. selectedTaskType: null, //选择的任务类型
  1060. selectedTimeType: null, //选择的时间类型
  1061. selectedRequestType: null, //选择的http请求类型
  1062. selectedUser: null, //选择的用户
  1063. selectedGroup: null, //选择的用户组
  1064. selectedStatus: {
  1065. value: '启用',
  1066. }, //选择的状态
  1067. timeoutAlarm: false, //是否超时报警
  1068. timeout: null, //超时时间
  1069. timeoutTermination: false, //是否超时终止
  1070. failureAlarm: false, //是否失败报警
  1071. selectedAlarmUser: null, //选择的报警联系人
  1072. };
  1073. },
  1074. getAllTaskDefineDtos: function () {
  1075. var _self = this;
  1076. var taskDefineSelectRequest = {
  1077. id: null,
  1078. taskName: null,
  1079. taskDescription: null,
  1080. start: (this.pagination.current_page - 1) * this.pagination.per_page,
  1081. length: this.pagination.per_page,
  1082. };
  1083. _self.taskDefineDtos.splice(0, _self.taskDefineDtos.length);
  1084. TaskDefineResource.getAllTaskDefine(taskDefineSelectRequest).then(
  1085. successData => {
  1086. // console.log(successData);
  1087. if (successData && successData.errorCode == 0) {
  1088. _self.taskDefineDtos = successData.datas;
  1089. _self.pagination.total = successData.total;
  1090. // _self.pagination.last_page = Math.ceil(
  1091. // successData.total / _self.pagination.per_page,
  1092. // );
  1093. }
  1094. // _self.fixedTableHeader();
  1095. },
  1096. errorData => {
  1097. Common.processException(errorData);
  1098. },
  1099. );
  1100. },
  1101. /**
  1102. * 保存任务流程
  1103. */
  1104. saveTaskProcess: function () {
  1105. var _self = this;
  1106. if (_self.taskDefineDto.selectedTaskType.value == 'HTTP任务') {
  1107. _self.taskDefineDto.processReportNo = null;
  1108. _self.taskDefineDto.processReportName = null;
  1109. _self.taskDefineDto.processNo = null;
  1110. _self.processDatas = [];
  1111. } else if (_self.taskDefineDto.selectedTaskType.value == '流程报表') {
  1112. _self.taskDefineDto.selectedRequestType = null;
  1113. _self.taskDefineDto.httpRequestUrl = null;
  1114. _self.taskDefineDto.httpRequestParam = null;
  1115. _self.taskDefineDto.processNo = null;
  1116. _self.processDatas = [];
  1117. } else if (_self.taskDefineDto.selectedTaskType.value == '流程') {
  1118. _self.taskDefineDto.processReportNo = null;
  1119. _self.taskDefineDto.processReportName = null;
  1120. _self.taskDefineDto.selectedRequestType = null;
  1121. _self.taskDefineDto.httpRequestUrl = null;
  1122. _self.taskDefineDto.httpRequestParam = null;
  1123. _self.taskDefineDto.selectedUser = [];
  1124. _self.taskDefineDto.selectedGroup = [];
  1125. }
  1126. if (_self.processDatas && _self.processDatas.length > 0) {
  1127. _self.taskDefineDto.processParam = JSON.stringify(_self.processDatas);
  1128. } else {
  1129. _self.taskDefineDto.processParam = null;
  1130. }
  1131. var receiveUserIds = [];
  1132. if (
  1133. _self.taskDefineDto.selectedUser != null &&
  1134. _self.taskDefineDto.selectedUser.length > 0
  1135. ) {
  1136. _self.taskDefineDto.selectedUser.forEach(function (item) {
  1137. receiveUserIds.push(item.id);
  1138. });
  1139. }
  1140. var receiveGroupIds = [];
  1141. if (
  1142. _self.taskDefineDto.selectedGroup != null &&
  1143. _self.taskDefineDto.selectedGroup.length > 0
  1144. ) {
  1145. _self.taskDefineDto.selectedGroup.forEach(function (item) {
  1146. receiveGroupIds.push(item.id);
  1147. });
  1148. }
  1149. var alarmUserIds = [];
  1150. if (
  1151. _self.taskDefineDto.selectedAlarmUser != null &&
  1152. _self.taskDefineDto.selectedAlarmUser.length > 0
  1153. ) {
  1154. _self.taskDefineDto.selectedAlarmUser.forEach(function (item) {
  1155. alarmUserIds.push(item.id);
  1156. });
  1157. }
  1158. var httpRequestType = null;
  1159. if (_self.taskDefineDto.selectedRequestType != null) {
  1160. httpRequestType = _self.taskDefineDto.selectedRequestType.value;
  1161. }
  1162. var requestDto = {
  1163. id: _self.taskDefineDto.id,
  1164. taskName: _self.taskDefineDto.taskName,
  1165. taskDescription: _self.taskDefineDto.taskDescription,
  1166. receiveUserIds: receiveUserIds,
  1167. receiveGroupIds: receiveGroupIds,
  1168. taskType: _self.taskDefineDto.selectedTaskType.value,
  1169. processReportNo: _self.taskDefineDto.processReportNo,
  1170. processReportName: _self.taskDefineDto.processReportName,
  1171. httpRequestType: httpRequestType,
  1172. httpRequestUrl: _self.taskDefineDto.httpRequestUrl,
  1173. httpRequestParam: _self.taskDefineDto.httpRequestParam,
  1174. taskTimeType: _self.taskDefineDto.selectedTimeType.value,
  1175. cronExpression: _self.taskDefineDto.cron,
  1176. timeOutAlarm: _self.taskDefineDto.timeoutAlarm,
  1177. timeOut: _self.taskDefineDto.timeout,
  1178. timeoutTermination: _self.taskDefineDto.timeoutTermination,
  1179. failureAlarm: _self.taskDefineDto.failureAlarm,
  1180. alarmUserIds: alarmUserIds,
  1181. taskStatus: _self.taskDefineDto.selectedStatus.value,
  1182. processNo: _self.taskDefineDto.processNo,
  1183. processParam: _self.taskDefineDto.processParam,
  1184. };
  1185. if (_self.taskDefineDto.selectedTaskType.value == '流程') {
  1186. requestDto.taskType = '流程任务';
  1187. }
  1188. TaskDefineResource.saveTaskDefine(requestDto).then(
  1189. successData => {
  1190. if (successData) {
  1191. if (successData.errorCode == 0) {
  1192. Notify.success('成功', successData.errorMessage, 2000);
  1193. } else {
  1194. Notify.error('失败', successData.errorMessage, false);
  1195. }
  1196. _self.restore();
  1197. _self.getAllTaskDefineDtos();
  1198. _self.visible = false;
  1199. }
  1200. },
  1201. errorData => {
  1202. Common.processException(errorData);
  1203. },
  1204. );
  1205. },
  1206. // 第一步检查
  1207. stepCheck1: function () {
  1208. var _self = this;
  1209. var response = {
  1210. errorCode: 0,
  1211. errorMessage: '',
  1212. };
  1213. if (
  1214. _self.taskDefineDto.taskName == null ||
  1215. _self.taskDefineDto.taskName.trim().length == 0
  1216. ) {
  1217. response.errorCode = 1;
  1218. response.errorMessage = '请填写任务名称';
  1219. return response;
  1220. }
  1221. if (
  1222. _self.taskDefineDto.taskDescription == null ||
  1223. _self.taskDefineDto.taskDescription.trim().length == 0
  1224. ) {
  1225. response.errorCode = 2;
  1226. response.errorMessage = '请填写任务描述';
  1227. return response;
  1228. }
  1229. if (_self.taskDefineDto.selectedTaskType == null) {
  1230. response.errorCode = 3;
  1231. response.errorMessage = '请选择任务类型';
  1232. return response;
  1233. } else {
  1234. if (_self.taskDefineDto.selectedTaskType.value == 'HTTP任务') {
  1235. if (_self.taskDefineDto.selectedRequestType == null) {
  1236. response.errorCode = 4;
  1237. response.errorMessage = '请选择HTTP请求类型';
  1238. return response;
  1239. }
  1240. if (
  1241. _self.taskDefineDto.httpRequestUrl == null ||
  1242. _self.taskDefineDto.httpRequestUrl.trim().length == 0
  1243. ) {
  1244. response.errorCode = 5;
  1245. response.errorMessage = '请填写HTTP请求地址';
  1246. return response;
  1247. }
  1248. } else if (_self.taskDefineDto.selectedTaskType.value == '流程报表') {
  1249. if (
  1250. _self.taskDefineDto.processReportNo == null ||
  1251. _self.taskDefineDto.processReportNo.trim().length == 0
  1252. ) {
  1253. response.errorCode = 6;
  1254. response.errorMessage = '请填写流程报表文件编码';
  1255. return response;
  1256. }
  1257. if (
  1258. _self.taskDefineDto.processReportName == null ||
  1259. _self.taskDefineDto.processReportName.trim().length == 0
  1260. ) {
  1261. response.errorCode = 7;
  1262. response.errorMessage = '请填写流程报表名称';
  1263. return response;
  1264. }
  1265. } else if (_self.taskDefineDto.selectedTaskType.value == '流程'){
  1266. if (!_self.taskDefineDto.processNo){
  1267. response.errorCode = 8;
  1268. response.errorMessage = '请选择流程编号';
  1269. return response;
  1270. }
  1271. if(_self.processDatas.length == 0){
  1272. response.errorCode = 9;
  1273. response.errorMessage = '请添加流程参数';
  1274. return response;
  1275. }
  1276. }
  1277. }
  1278. return response;
  1279. },
  1280. // 第二步检查
  1281. stepCheck2: function () {
  1282. var _self = this;
  1283. var response = {
  1284. errorCode: 0,
  1285. errorMessage: '',
  1286. };
  1287. if (_self.taskDefineDto.selectedTimeType == null) {
  1288. response.errorCode = 1;
  1289. response.errorMessage = '请选择时间类型';
  1290. return response;
  1291. } else {
  1292. if (_self.taskDefineDto.selectedTimeType.value == 'cron') {
  1293. if (
  1294. _self.taskDefineDto.cron == null ||
  1295. _self.taskDefineDto.cron.trim().length == 0
  1296. ) {
  1297. response.errorCode = 2;
  1298. response.errorMessage = '请填写cron表达式';
  1299. return response;
  1300. }
  1301. }
  1302. }
  1303. return response;
  1304. },
  1305. // 第三步检查
  1306. stepCheck3: function () {
  1307. var _self = this;
  1308. var response = {
  1309. errorCode: 0,
  1310. errorMessage: '',
  1311. };
  1312. if (_self.taskDefineDto.timeoutAlarm == true) {
  1313. if (_self.taskDefineDto.timeout == null) {
  1314. response.errorCode = 1;
  1315. response.errorMessage = '请填写超时时间';
  1316. return response;
  1317. }
  1318. }
  1319. return response;
  1320. },
  1321. // 第四步检查
  1322. stepCheck4: function () {
  1323. var _self = this;
  1324. var response = {
  1325. errorCode: 0,
  1326. errorMessage: '',
  1327. };
  1328. if (_self.taskDefineDto.selectedStatus == null) {
  1329. response.errorCode = 1;
  1330. response.errorMessage = '请设置任务状态';
  1331. return response;
  1332. }
  1333. return response;
  1334. },
  1335. /**
  1336. * 保存校验
  1337. */
  1338. saveCheck: function () {
  1339. var _self = this;
  1340. var response = null;
  1341. if (_self.step == 1) {
  1342. response = _self.stepCheck1();
  1343. } else if (_self.step == 2) {
  1344. response = _self.stepCheck2();
  1345. } else if (_self.step == 3) {
  1346. response = _self.stepCheck3();
  1347. } else if (_self.step == 4) {
  1348. response = _self.stepCheck4();
  1349. }
  1350. if (response.errorCode > 0) {
  1351. Notify.error('错误', response.errorMessage, false);
  1352. return;
  1353. } else {
  1354. if (_self.step == 4) {
  1355. _self.saveTaskProcess();
  1356. } else {
  1357. _self.step = _self.step + 1;
  1358. }
  1359. }
  1360. },
  1361. /**
  1362. * 冻结表头
  1363. */
  1364. // fixedTableHeader: function () {
  1365. // const _self = this;
  1366. // _self.$nextTick(function () {
  1367. // $('.fixed-table').tableFixer({
  1368. // left: 3,
  1369. // head: true,
  1370. // });
  1371. // });
  1372. // },
  1373. /**
  1374. * 查询所有用户
  1375. */
  1376. getAllUsers: function () {
  1377. var _self = this;
  1378. _self.users.splice(0, _self.users.length);
  1379. UserResource.getAllUsers().then(
  1380. successData => {
  1381. if (successData && successData.errorCode == 0) {
  1382. successData.datas.forEach(function (item) {
  1383. var user = {
  1384. id: item.id,
  1385. value: item.name,
  1386. };
  1387. _self.users.push(user);
  1388. });
  1389. }
  1390. },
  1391. errorData => {
  1392. Common.processException(errorData);
  1393. },
  1394. );
  1395. },
  1396. /**
  1397. * 查询所有用户组
  1398. */
  1399. getAllGroups: function () {
  1400. var _self = this;
  1401. _self.groups.splice(0, _self.groups.length);
  1402. GroupResource.getGroupByClient().then(
  1403. successData => {
  1404. if (successData) {
  1405. successData.forEach(function (item) {
  1406. var group = {
  1407. id: item.id,
  1408. value: item.name,
  1409. };
  1410. _self.groups.push(group);
  1411. });
  1412. }
  1413. },
  1414. errorData => {
  1415. Common.processException(errorData);
  1416. },
  1417. );
  1418. },
  1419. // 深拷贝
  1420. deepClone: function (obj) {
  1421. const _self = this;
  1422. if (typeof obj !== 'object' || obj == null) {
  1423. return obj;
  1424. }
  1425. let result = Array.isArray(obj) ? [] : {};
  1426. for (let key in obj) {
  1427. if (Object.prototype.hasOwnProperty.call(obj, key)) {
  1428. result[key] = _self.deepClone(obj[key]);
  1429. }
  1430. }
  1431. return result;
  1432. },
  1433. },
  1434. };
  1435. </script>
  1436. <style scoped>
  1437. .fixed-table {
  1438. table-layout: fixed;
  1439. width: 1150px !important;
  1440. min-width: 1150px !important;
  1441. }
  1442. #create {
  1443. width: 65%;
  1444. }
  1445. </style>