cloud-web-corejs 1.0.54-dev.294 → 1.0.54-dev.296

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,320 @@
1
+ <template>
2
+ <el-dialog
3
+ :title="$t2('查看候选人', 'components.wf.setCandidateTitle')"
4
+ :close-on-click-modal="falseValue"
5
+ :visible.sync="showDialog"
6
+ :modal="falseValue"
7
+ custom-class="dialog-style list-dialog dialog-checkbox pd_0"
8
+ width="1200px"
9
+ @close="closeWin"
10
+ v-el-drag-dialog
11
+ v-el-dialog-center
12
+ :append-to-body="true"
13
+ >
14
+ <template #title>
15
+ <span class="el-dialog__title">
16
+ {{ $t2("查看候选人", "components.wf.setCandidateTitle")
17
+ }}
18
+ </span>
19
+ </template>
20
+ <div class="cont" style="height: 450px">
21
+ <vxe-grid
22
+ ref="table-m1"
23
+ :data="tableData"
24
+ v-bind="vxeOption"
25
+ @resizable-change="$vxeTableUtil.onColumnWitchChange"
26
+ @custom="$vxeTableUtil.customHandle"
27
+ >
28
+ <template #wfTaskCandidates="{ row }">
29
+ {{ getUsernames(row) }}
30
+ </template>
31
+ <template #operate="{ row, rowIndex }">
32
+ <a
33
+ @click="openUserDialig(row, rowIndex)"
34
+ class="a-link"
35
+ v-if="row.modifyCandidates"
36
+ >
37
+ <el-tooltip
38
+ :enterable="false"
39
+ effect="dark"
40
+ :content="$t2('设置候选人', 'components.wf.modifyCandidate')"
41
+ placement="top"
42
+ popper-class="tooltip-skin"
43
+ >
44
+ <div>
45
+ <i class="el-icon-edit"></i
46
+ ><span>{{
47
+ $t2("设置候选人", "components.wf.modifyCandidate")
48
+ }}</span>
49
+ </div>
50
+ </el-tooltip>
51
+ </a>
52
+ </template>
53
+ </vxe-grid>
54
+ </div>
55
+ <span slot="footer" class="dialog-footer">
56
+ <el-button type="primary" plain class="button-sty" @click="closeWin">
57
+ <i class="el-icon-close el-icon"></i>
58
+ {{ $t2("取 消", "system.button.cancel2") }}
59
+ </el-button>
60
+ <el-button type="primary" @click="confirmDialog" class="button-sty">
61
+ <i class="el-icon-check el-icon"></i>
62
+ {{ $t2("确 定", "system.button.confirm2") }}
63
+ </el-button>
64
+ </span>
65
+ <user-dialog
66
+ v-if="showUserDialog"
67
+ :visiable.sync="showUserDialog"
68
+ @close="showUserDialog = false"
69
+ @confirm="userConfirm"
70
+ multi="true"
71
+ :rows="userRows"
72
+ ></user-dialog>
73
+ <wfTaskUserRangeDialog
74
+ v-if="showWfTaskUserRangeDialog"
75
+ :visiable.sync="showWfTaskUserRangeDialog"
76
+ @close="showWfTaskUserRangeDialog = false"
77
+ @confirm="confirmWfTaskUserRangeDialog"
78
+ multi="true"
79
+ :rows="userRangeRows"
80
+ :rangeTableDatas="rangeTableDatas"
81
+ :current_prefix="current_prefix"
82
+ ></wfTaskUserRangeDialog>
83
+ </el-dialog>
84
+
85
+
86
+ </template>
87
+
88
+ <script>
89
+ import { selectDialogMixins } from "../../mixins/selectDialog/index.js";
90
+ import userDialog from "../../views/user/user/dialog.vue";
91
+ import wfTaskUserRangeDialog from './wfTaskUserRangeDialog.vue'
92
+ export default {
93
+ mixins: [selectDialogMixins],
94
+ props: ['visiable', 'multi', 'rows', 'param', 'current_prefix',"modelId"],
95
+ components: {userDialog,wfTaskUserRangeDialog},
96
+ created() {
97
+
98
+ },
99
+ mounted() {
100
+
101
+ // this.initWfUserRangeParam();
102
+ this.initTableM1();
103
+ },
104
+ data() {
105
+ var that = this;
106
+ return {
107
+ showDialog: true,
108
+ falseValue: false,
109
+ selectMulti: true,
110
+ vxeOption: {},
111
+ showUserDialog: false,
112
+ userRows: [],
113
+ operateIndex: -1,
114
+
115
+ rangeTableDatas: [],
116
+ userRangeRows: [],
117
+ showWfTaskUserRangeDialog:false,
118
+
119
+ tableData: []
120
+
121
+
122
+
123
+ // wfUserRangeEnabled: false
124
+ };
125
+ },
126
+ methods: {
127
+ /* initWfUserRangeParam(){
128
+ this.$http({
129
+ url: USER_PREFIX + "/wf_diy_attribute/getValue",
130
+ method: `post`,
131
+ data: {attributeKey: "param12"},
132
+ success: (res) => {
133
+ this.wfUserRangeEnabled = res?.objx === true;
134
+ },
135
+ });
136
+ }, */
137
+ openShowWfTaskUserRangeDialog(row,rowIndex,rangeTableDatas){
138
+ this.userRangeRows = row.wfTaskCandidateDTOs.map(item => {
139
+ return {
140
+ userId: item.id,
141
+ nickName: item.name
142
+ }
143
+ });
144
+ this.rangeTableDatas = rangeTableDatas;
145
+ this.operateIndex = rowIndex;
146
+ this.showWfTaskUserRangeDialog = true;
147
+ },
148
+ confirmWfTaskUserRangeDialog(rows){
149
+ let $grid = this.$refs["table-m1"];
150
+ let item = $grid.getTableData().fullData[this.operateIndex];
151
+ let wfTaskCandidateDTOs = item.wfTaskCandidateDTOs;
152
+ let item1s = [];
153
+ let item2s = []
154
+ rows.forEach(row => {
155
+ let userId = row.userId;
156
+ let wfTaskCandidateDTO = wfTaskCandidateDTOs.find(item => item.id == userId)
157
+ if (wfTaskCandidateDTO) {
158
+ if (!wfTaskCandidateDTO.userFlag) wfTaskCandidateDTO.userFlag = 6
159
+ item1s.push({...wfTaskCandidateDTO});
160
+ } else {
161
+ item2s.push({
162
+ id: userId,
163
+ name: row.nickName,
164
+ userFlag: 6
165
+ })
166
+ }
167
+ })
168
+ item.wfTaskCandidateDTOs = item1s.concat(item2s)
169
+
170
+ // this.saveItem(item);
171
+ },
172
+ initTableM1() {
173
+ this.tableData = this.$baseLodash.cloneDeep(this.rows || []);
174
+ let that = this;
175
+ let tableOption = {
176
+ vue: that,
177
+ tableRef: 'table-m1',
178
+ tableName: 'setCandidateDialog2_dialog-m1',
179
+ // path: this.current_prefix + '/wf/getAllNodes',
180
+ /* param: () => {
181
+ return {
182
+ stringOne: this.wfInfo.uuid
183
+ }
184
+ }, */
185
+ config: {
186
+ /*checkboxConfig: {
187
+ checkStrictly: true,
188
+ showHeader: this.selectMulti,
189
+ },*/
190
+ /* proxyConfig: {
191
+ props: {
192
+ result: "objx", // 配置响应结果列表字段
193
+ total: "objx.length", // 配置响应结果总页数字段
194
+ },
195
+ }, */
196
+ },
197
+ columns: [
198
+ {type: 'checkbox', width: 50, resizable: false, fixed: 'left'},
199
+ {title: this.$t2('节点名称', 'components.wf.nodeName'), field: 'nodeName', width: 250, fixed: 'left'},
200
+ {
201
+ field: 'wfTaskCandidates',
202
+ title: this.$t2('候选人', 'components.wf.candidate'),
203
+ width: 450,
204
+ slots: {
205
+ default: 'wfTaskCandidates'
206
+ }
207
+ },
208
+ {
209
+ width: 150,
210
+ fixed: 'right',
211
+ title: '',
212
+ sortable: false,
213
+ slots: {
214
+ default: 'operate'
215
+ }
216
+ }
217
+ ]
218
+ };
219
+ this.$vxeTableUtil.initVxeTable(tableOption).then(opts => {
220
+ that.vxeOption = opts;
221
+ });
222
+ },
223
+ getUsernames(row) {
224
+ return row.wfTaskCandidateDTOs.map(item => item.name).join(",")
225
+ },
226
+ checkWfTaskUserRange(row, rowIndex, callback){
227
+ //是否使用用户范围
228
+ /* if(!this.wfUserRangeEnabled){
229
+ //不使用用户范围
230
+ callback();
231
+ return
232
+ } */
233
+ this.$http({
234
+ url: this.current_prefix + '/wf_task_user_range/list',
235
+ method: `post`,
236
+ data: {
237
+ modelId: this.modelId,
238
+ taskDefinitionKey: row.nodeId
239
+ },
240
+ isLoading: true,
241
+ success: res => {
242
+ let rows = res.objx || [];
243
+ if(!rows.length){
244
+ //不使用用户范围
245
+ callback();
246
+ }else{
247
+ //使用用户范围
248
+ this.openShowWfTaskUserRangeDialog(row, rowIndex,rows)
249
+ }
250
+ }
251
+ });
252
+ },
253
+
254
+ openUserDialig(row, rowIndex) {
255
+ //是否使用用户范围
256
+ this.checkWfTaskUserRange(row, rowIndex, ()=>{
257
+ //不使用用户范围
258
+ this.userRows = row.wfTaskCandidateDTOs.map(item => {
259
+ return {
260
+ id: item.id,
261
+ nickName: item.name
262
+ }
263
+ });
264
+ this.operateIndex = rowIndex;
265
+ this.showUserDialog = true;
266
+ })
267
+ },
268
+ userConfirm(rows) {
269
+ let $grid = this.$refs["table-m1"];
270
+ let item = $grid.getTableData().fullData[this.operateIndex];
271
+ let wfTaskCandidateDTOs = item.wfTaskCandidateDTOs;
272
+ let item1s = [];
273
+ let item2s = []
274
+ rows.forEach(row => {
275
+ let userId = row.id + "";
276
+ let wfTaskCandidateDTO = wfTaskCandidateDTOs.find(item => item.id == userId)
277
+ if (wfTaskCandidateDTO) {
278
+ if (!wfTaskCandidateDTO.userFlag) wfTaskCandidateDTO.userFlag = 6
279
+ item1s.push({...wfTaskCandidateDTO});
280
+ } else {
281
+ item2s.push({
282
+ id: userId,
283
+ name: row.nickName,
284
+ userFlag: 6
285
+ })
286
+ }
287
+ })
288
+ item.wfTaskCandidateDTOs = item1s.concat(item2s)
289
+
290
+ // this.saveItem(item);
291
+ },
292
+ saveItem(row) {
293
+ this.$http({
294
+ url: this.current_prefix + '/wf/setTaskUser',
295
+ method: `post`,
296
+ data: row,
297
+ isLoading: true,
298
+ success: res => {
299
+ this.$message({
300
+ message: res.content,
301
+ type: 'success',
302
+ duration: 500,
303
+ onClose: t => {
304
+ this.searchEvent();
305
+ }
306
+ });
307
+ }
308
+ });
309
+ },
310
+ confirmDialog(){
311
+ this.$emit("confirm",this.tableData)
312
+ this.closeWin()
313
+ },
314
+ closeWin() {
315
+ this.dialogClose();
316
+ this.$emit('close')
317
+ }
318
+ }
319
+ };
320
+ </script>
@@ -378,7 +378,7 @@ wfContentMixin = {
378
378
 
379
379
  showCandidate: false,
380
380
  candidateOption:{},
381
- candidateDatas:[]
381
+ candidateDatas:[],
382
382
  };
383
383
  },
384
384
  provide() {
@@ -1560,6 +1560,11 @@ wfStartMixin = {
1560
1560
  showDialog: false,
1561
1561
  wfStartForm: {},
1562
1562
  wfDefItems: [],
1563
+
1564
+ startFormData:{},
1565
+ wfUserRangeEnabled: false,
1566
+ preStartResult:[],
1567
+ showSetCandidateDialog2:false
1563
1568
  };
1564
1569
  },
1565
1570
  computed: {
@@ -1567,15 +1572,51 @@ wfStartMixin = {
1567
1572
  return this.serviceId ? "/" + this.serviceId : "";
1568
1573
  },
1569
1574
  },
1570
- async mounted() {
1571
- await this.initWfInfo(this.code);
1575
+ mounted() {
1576
+ this.initWfInfo(this.code);
1572
1577
  // this.showDialog = true;
1573
1578
  },
1574
1579
  methods: {
1580
+ preStart(){
1581
+ let that = getTarget(this);
1582
+ return new Promise(resolve=>{
1583
+ return that.$http({
1584
+ url: this.current_prefix + "/wf/preStart",
1585
+ method: `post`,
1586
+ data: this.startFormData,
1587
+ success: (res) => {
1588
+ resolve(res.objx);
1589
+ },
1590
+ });
1591
+ })
1592
+ },
1593
+ initWfUserRangeParam(){
1594
+ let that = getTarget(this);
1595
+ return that.$http({
1596
+ url: USER_PREFIX + "/wf_diy_attribute/getValue",
1597
+ method: `post`,
1598
+ data: {attributeKey: "param12"},
1599
+ success: (res) => {
1600
+ this.wfUserRangeEnabled = res?.objx === true;
1601
+ },
1602
+ });
1603
+ },
1604
+ openSetCandidateDialog(){
1605
+ this.showSetCandidateDialog2 = true;
1606
+ },
1607
+ confirmSetCandidateDialog(rows){
1608
+ let formData = {
1609
+ ...this.startFormData,
1610
+ wfNodeDTOs: rows
1611
+ }
1612
+ this.startSubmitHanlde(formData);
1613
+ },
1575
1614
  async initWfInfo(code) {
1576
1615
  let that = getTarget(this);
1577
1616
  var wfDefItems = null;
1578
1617
  var objId = this.dataId;
1618
+
1619
+ await this.initWfUserRangeParam();
1579
1620
  await that.$http({
1580
1621
  url: this.current_prefix + "/wf_obj_config_item/list",
1581
1622
  data: {
@@ -1640,14 +1681,14 @@ wfStartMixin = {
1640
1681
  this.subWfStartForm();
1641
1682
  }
1642
1683
  },
1643
- subWfStartForm() {
1684
+ async subWfStartForm() {
1644
1685
  let that = getTarget(this);
1645
1686
  var modelId = this.wfStartForm.modelId;
1646
1687
  if (!modelId) {
1647
1688
  that.$baseAlert(this.$t2('请选择流程模版', 'components.wf.startWarnMsg2'));
1648
1689
  return false;
1649
1690
  }
1650
- this.showDialog = false;
1691
+
1651
1692
  let option = this.option;
1652
1693
 
1653
1694
  var objId = this.dataId;
@@ -1655,21 +1696,37 @@ wfStartMixin = {
1655
1696
  let startParam = this.startParam || {};
1656
1697
  let formCode = this.formCode || null;
1657
1698
 
1658
- var data = JSON.stringify({
1699
+ var data = {
1659
1700
  modelId: modelId,
1660
1701
  objTypeCode: this.code,
1661
1702
  objId: objId,
1662
1703
  formData: startParam,
1663
1704
  formCode: formCode
1664
1705
  // name:this.wfName
1665
- });
1706
+ };
1707
+ this.startFormData = data;
1708
+
1709
+ if(this.wfUserRangeEnabled){
1710
+ this.preStartResult = await this.preStart() || []
1711
+ if(this.preStartResult.length){
1712
+ this.openSetCandidateDialog()
1713
+ return
1714
+ }
1715
+ }
1716
+ this.startSubmitHanlde(this.startFormData);
1717
+
1718
+ },
1719
+ startSubmitHanlde(formData){
1720
+ this.showDialog = false;
1721
+ let that = getTarget(this);
1722
+ let option = this.option;
1666
1723
  that.$http({
1667
1724
  url: this.current_prefix + "/wf/start",
1668
- data: data,
1725
+ data: formData,
1669
1726
  method: "post",
1670
- headers: {
1727
+ /* headers: {
1671
1728
  "Content-Type": "application/json;charset=utf-8",
1672
- },
1729
+ }, */
1673
1730
  isLoading: true,
1674
1731
  callback: (resultMsg) => {
1675
1732
  if (resultMsg.type == "success") {
@@ -1696,6 +1753,7 @@ wfStartMixin = {
1696
1753
  });
1697
1754
  },
1698
1755
  close() {
1756
+ debugger
1699
1757
  this.$emit("update:visible", false);
1700
1758
  },
1701
1759
  },
@@ -1,49 +1,77 @@
1
1
  <template>
2
- <el-dialog :title="$t2('流程启动', 'components.wf.wfStart')" :visible.sync="showDialog" v-if="showDialog"
3
- :modal-append-to-body="false" @close="close"
4
- custom-class="dialog-style wf-dialog" v-el-drag-dialog>
5
- <el-form :model="wfStartForm">
6
- <div id="containt">
7
- <table class="table-detail">
8
- <tbody>
9
- <tr>
10
- <th>
11
- <span class="t">
12
- <em class="f-red">*</em>
13
- {{ $t2('流程', 'components.wf.flow') }}
14
- </span>
15
- </th>
16
- <td>
17
- <el-form-item field="modelId" label-width="120">
18
- <el-radio-group v-model="wfStartForm.modelId">
19
- <el-radio v-for="(wfDefItem,index) in wfDefItems" :label="wfDefItem.modelId" :key="index">
20
- {{ wfDefItem.modelName }}
21
- </el-radio>
22
- </el-radio-group>
23
- </el-form-item>
24
- </td>
25
- </tr>
26
- </tbody>
27
- </table>
28
- </div>
29
- </el-form>
30
- <span slot="footer" class="dialog-footer">
31
- <el-button type="primary" plain class="button-sty" @click="showDialog = false">
32
- <i class="el-icon-close el-icon"></i>
33
- {{ $t2('取 消', 'system.button.cancel2') }}
34
- </el-button>
35
- <el-button type="primary" @click="startSubmit()" class="button-sty">
36
- <i class="el-icon-check el-icon"></i>
37
- {{ $t2('确 定', 'system.button.confirm2') }}
38
- </el-button>
39
- </span>
40
- </el-dialog>
2
+ <div>
3
+ <el-dialog
4
+ :title="$t2('流程启动', 'components.wf.wfStart')"
5
+ :visible.sync="showDialog"
6
+ v-if="showDialog"
7
+ :modal-append-to-body="false"
8
+ @close="close"
9
+ custom-class="dialog-style wf-dialog"
10
+ v-el-drag-dialog
11
+ >
12
+ <el-form :model="wfStartForm">
13
+ <div id="containt">
14
+ <table class="table-detail">
15
+ <tbody>
16
+ <tr>
17
+ <th>
18
+ <span class="t">
19
+ <em class="f-red">*</em>
20
+ {{ $t2("流程", "components.wf.flow") }}
21
+ </span>
22
+ </th>
23
+ <td>
24
+ <el-form-item field="modelId" label-width="120">
25
+ <el-radio-group v-model="wfStartForm.modelId">
26
+ <el-radio
27
+ v-for="(wfDefItem, index) in wfDefItems"
28
+ :label="wfDefItem.modelId"
29
+ :key="index"
30
+ >
31
+ {{ wfDefItem.modelName }}
32
+ </el-radio>
33
+ </el-radio-group>
34
+ </el-form-item>
35
+ </td>
36
+ </tr>
37
+ </tbody>
38
+ </table>
39
+ </div>
40
+ </el-form>
41
+ <span slot="footer" class="dialog-footer">
42
+ <el-button
43
+ type="primary"
44
+ plain
45
+ class="button-sty"
46
+ @click="showDialog = false"
47
+ >
48
+ <i class="el-icon-close el-icon"></i>
49
+ {{ $t2("取 消", "system.button.cancel2") }}
50
+ </el-button>
51
+ <el-button type="primary" @click="startSubmit()" class="button-sty">
52
+ <i class="el-icon-check el-icon"></i>
53
+ {{ $t2("确 定", "system.button.confirm2") }}
54
+ </el-button>
55
+ </span>
56
+ </el-dialog>
57
+ <setCandidateDialog2
58
+ v-if="showSetCandidateDialog2"
59
+ :visiable.sync="showSetCandidateDialog2"
60
+ :current_prefix="current_prefix"
61
+ :rows="preStartResult"
62
+ :modelId="startFormData.modelId"
63
+ @confirm="confirmSetCandidateDialog"
64
+ ></setCandidateDialog2>
65
+ </div>
41
66
  </template>
42
67
 
43
68
  <script>
44
- import {wfStartMixin} from './wf.js';
45
-
69
+ import { wfStartMixin } from "./wf.js";
70
+ // import setCandidateDialog2 from './setCandidateDialog2';
46
71
  export default {
47
- mixins: [wfStartMixin]
72
+ mixins: [wfStartMixin],
73
+ components: {
74
+ setCandidateDialog2: () => import("./setCandidateDialog2.vue"),
75
+ },
48
76
  };
49
77
  </script>