saas-tenant-approve-app 0.2.42 → 0.2.44

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.
@@ -14742,6 +14742,13 @@ function projectCustomNodes(baseurl, data) {
14742
14742
  data
14743
14743
  });
14744
14744
  }
14745
+ function queryOptionalScopeUsers(baseurl, data) {
14746
+ return service({
14747
+ url: baseurl + '/work/queryOptionalScopeUsers',
14748
+ method: 'POST',
14749
+ data
14750
+ });
14751
+ }
14745
14752
  // 指定标签查询人员
14746
14753
  function queryTSysUserRoleList(baseurl, data) {
14747
14754
  return service({
@@ -14896,6 +14903,9 @@ approveMobileTree.prototype = {
14896
14903
  roterData: [],
14897
14904
  allData: [],
14898
14905
  init: function () {
14906
+ // Inline tree handlers must use the constructor that opened this picker.
14907
+ approveMobileTree.prototype.previousGlobalConstructor = window.approveMobileTree;
14908
+ window.approveMobileTree = approveMobileTree;
14899
14909
  approveMobileTree.prototype.options = this.options;
14900
14910
  approveMobileTree.prototype.nodesMap = this.options.defaultKey ? this.options.defaultKey : [];
14901
14911
 
@@ -15130,6 +15140,10 @@ approveMobileTree.prototype = {
15130
15140
  //取消组织树
15131
15141
  cancleTree: function () {
15132
15142
  $(".deptUserTree").remove();
15143
+ if (window.approveMobileTree === approveMobileTree) {
15144
+ window.approveMobileTree = approveMobileTree.prototype.previousGlobalConstructor || approveMobileTree;
15145
+ }
15146
+ delete approveMobileTree.prototype.previousGlobalConstructor;
15133
15147
  },
15134
15148
  showCheck: function () {
15135
15149
  var defaultKey = approveMobileTree.prototype.nodesMap;
@@ -15744,8 +15758,8 @@ var approveLineAll_component = normalizeComponent(
15744
15758
  )
15745
15759
 
15746
15760
  /* harmony default export */ var approveLineAll = (approveLineAll_component.exports);
15747
- ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/selectLine.vue?vue&type=template&id=9eacb8b4
15748
- var selectLinevue_type_template_id_9eacb8b4_render = function render() {
15761
+ ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/selectLine.vue?vue&type=template&id=59bf336a
15762
+ var selectLinevue_type_template_id_59bf336a_render = function render() {
15749
15763
  var _vm = this,
15750
15764
  _c = _vm._self._c;
15751
15765
  return _c('div', {
@@ -15767,7 +15781,7 @@ var selectLinevue_type_template_id_9eacb8b4_render = function render() {
15767
15781
  staticClass: "per_p1"
15768
15782
  }, [_vm._v(" " + _vm._s(node.name) + " ")]), _c('div', [_vm._l(node.list, function (per) {
15769
15783
  return _c('van-button', {
15770
- key: per.id,
15784
+ key: per.userId,
15771
15785
  staticClass: "per_name",
15772
15786
  attrs: {
15773
15787
  "type": "primary",
@@ -15844,7 +15858,7 @@ var selectLinevue_type_template_id_9eacb8b4_render = function render() {
15844
15858
  }
15845
15859
  }, [_c('van-cell-group', _vm._l(_vm.personList, function (item, index) {
15846
15860
  return _c('van-cell', {
15847
- key: item.id,
15861
+ key: item.userId,
15848
15862
  attrs: {
15849
15863
  "title": item.name,
15850
15864
  "clickable": ""
@@ -15876,7 +15890,7 @@ var selectLinevue_type_template_id_9eacb8b4_render = function render() {
15876
15890
  }
15877
15891
  }, [_c('van-cell-group', _vm._l(_vm.personList, function (item, index) {
15878
15892
  return _c('van-cell', {
15879
- key: item.id,
15893
+ key: item.userId,
15880
15894
  attrs: {
15881
15895
  "clickable": "",
15882
15896
  "title": item.name
@@ -15902,13 +15916,29 @@ var selectLinevue_type_template_id_9eacb8b4_render = function render() {
15902
15916
  });
15903
15917
  }), 1)], 1)], 1)])], 1);
15904
15918
  };
15905
- var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
15906
-
15919
+ var selectLinevue_type_template_id_59bf336a_staticRenderFns = [];
15920
+
15921
+ ;// CONCATENATED MODULE: ./src/utils/selectionScope.js
15922
+ const isCopyScope = node => node && node.type === 'copy' && node.checker && String(node.checker.isOptional) === '1' && String(node.checker.selectArea) === '2' && (Number(node.checker.scopeVersion) === 1 || (node.checker.selectedDepts || []).length > 0);
15923
+ const isScopedSelection = node => isCopyScope(node) || node && node.type === 'check' && node.checker && [7, 8].includes(Number(node.checker.type)) && String(node.checker.selectArea) === '2' && (Number(node.checker.scopeVersion) === 1 || (node.checker.selectedDepts || []).length > 0);
15924
+ function normalizeCandidates(people) {
15925
+ const unique = new Map();
15926
+ for (const person of people || []) {
15927
+ if (!person || String(person.type) === '2') continue;
15928
+ const userId = person.userId || person.id;
15929
+ if (userId) unique.set(String(userId), {
15930
+ userId: String(userId),
15931
+ name: person.name
15932
+ });
15933
+ }
15934
+ return [...unique.values()];
15935
+ }
15907
15936
  ;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/selectLine.vue?vue&type=script&lang=js
15908
15937
 
15909
15938
 
15910
15939
 
15911
15940
 
15941
+
15912
15942
  /* harmony default export */ var selectLinevue_type_script_lang_js = ({
15913
15943
  name: "SelectLine",
15914
15944
  props: {
@@ -15937,7 +15967,8 @@ var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
15937
15967
  showBtn: false,
15938
15968
  showdialog: false,
15939
15969
  selectPersonType: 1,
15940
- preNode: null
15970
+ preNode: null,
15971
+ scopeLoading: false
15941
15972
  };
15942
15973
  },
15943
15974
  mounted() {
@@ -16039,6 +16070,8 @@ var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
16039
16070
  roleList.push(tag.id);
16040
16071
  });
16041
16072
  }
16073
+ const copyRoleDefaults = isCopyScope(item) && item.checker.defaultApprover == 1 && roleList.length > 0;
16074
+ let scopedRoleDefaults = [];
16042
16075
  // 245.指定部门中带指定标签,查getPreCheckersByNode查
16043
16076
  if (item.checker.type == 2 || item.checker.type == 4 || item.checker.type == 5) {
16044
16077
  let res = await getPreCheckersByNode(that.SAAS_TENANT_API, {
@@ -16063,7 +16096,7 @@ var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
16063
16096
  }
16064
16097
  }
16065
16098
  // 9.部门标签自选,查getDeptRoleUsers接口选,10仅展示
16066
- if (item.checker.type == 9 || item.checker.type == 10 || item.checker.type == 11 || item.type == "copy" && item.checker.isOptional && item.checker.isOptional == '1') {
16099
+ if (item.checker.type == 9 || item.checker.type == 10 || item.checker.type == 11 || copyRoleDefaults || item.type == "copy" && item.checker.isOptional && item.checker.isOptional == '1' && !isCopyScope(item)) {
16067
16100
  let res = await getDeptRoleUsers(that.SAAS_TENANT_API, {
16068
16101
  uid: that.data.uid,
16069
16102
  roleList,
@@ -16074,12 +16107,18 @@ var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
16074
16107
  });
16075
16108
  if (res.status == 200) {
16076
16109
  list = res.result.data;
16110
+ if (copyRoleDefaults) {
16111
+ const allowed = new Set(normalizeCandidates(item.checker.selectedPersons).map(person => person.userId));
16112
+ scopedRoleDefaults = normalizeCandidates(list).filter(person => allowed.has(person.userId));
16113
+ }
16077
16114
  }
16078
16115
  }
16079
16116
  // 789选人节点,默认审批人为否,不回填
16080
16117
  if (([7, 8, 9].includes(item.checker.type) || item.type == "copy" && item.checker.isOptional && item.checker.isOptional == '1') && item.checker.defaultApprover != 1) {
16081
16118
  list = [];
16082
16119
  }
16120
+ // Only department role holders inside the configured range may be preselected.
16121
+ if (isCopyScope(item)) list = scopedRoleDefaults;
16083
16122
  return {
16084
16123
  id: item.id,
16085
16124
  type: item.type,
@@ -16118,21 +16157,39 @@ var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
16118
16157
  return false;
16119
16158
  }
16120
16159
  },
16121
- addApprover(node) {
16160
+ async addApprover(node) {
16122
16161
  let me = this;
16123
- if ((node.checker.type == 7 || node.checker.type == 8) && node.checker.selectArea == 2 && node.checker.selectedPersons && node.checker.selectedPersons.length > 0) {
16124
- //申请人自选,审批人自选
16125
- me.personList = [];
16162
+ const scoped = isScopedSelection(node);
16163
+ if (me.scopeLoading) return;
16164
+ if (scoped || (node.checker.type == 7 || node.checker.type == 8) && node.checker.selectArea == 2 && node.checker.selectedPersons && node.checker.selectedPersons.length > 0) {
16165
+ let candidates = normalizeCandidates(node.checker.selectedPersons);
16166
+ if (scoped && (me.data.aprId || me.data.id)) {
16167
+ me.scopeLoading = true;
16168
+ try {
16169
+ const response = await queryOptionalScopeUsers(me.SAAS_TENANT_API, {
16170
+ aprId: me.data.aprId,
16171
+ recordId: me.data.id,
16172
+ nodeId: node.id
16173
+ });
16174
+ if (Number(response.status) !== 200 || !Array.isArray(response.result && response.result.data)) throw new Error(response.message || '读取可选范围失败,请重试');
16175
+ candidates = normalizeCandidates(response.result.data);
16176
+ } catch (error) {
16177
+ toast.fail(error.message || '读取可选范围失败,请重试');
16178
+ return;
16179
+ } finally {
16180
+ me.scopeLoading = false;
16181
+ }
16182
+ }
16183
+ if (!candidates.length) {
16184
+ toast.fail('指定范围暂无可选人员,请联系流程管理员');
16185
+ return;
16186
+ }
16187
+ me.clearDialogData();
16126
16188
  me.selectPersonType = node.selectPersonType;
16127
16189
  me.preNode = node;
16128
- node.checker.selectedPersons.forEach(item => {
16129
- me.personList.push({
16130
- userId: item.id,
16131
- name: item.name,
16132
- id: node.id,
16133
- type: node.type
16134
- });
16135
- });
16190
+ me.personList = candidates;
16191
+ me.radioSelect = node.list[0] && node.list[0].userId;
16192
+ me.checkBoxList = node.list.map(item => item.userId);
16136
16193
  me.showdialog = true;
16137
16194
  } else {
16138
16195
  let defaultKey = [];
@@ -16186,7 +16243,7 @@ var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
16186
16243
  let submitFlag = true;
16187
16244
  let optionalUserList = [];
16188
16245
  this.approveList.forEach(item => {
16189
- if ([7, 8, 9].includes(item.checkertype)) {
16246
+ if (item.type === 'check' && [7, 8, 9].includes(item.checkertype)) {
16190
16247
  if (item.list && item.list.length) {
16191
16248
  if (item.selectPersonType == 1 && item.list.length > 1 && item.editApprover == 1) {
16192
16249
  toast.fail(`${item.name}只可选择一个审批人`);
@@ -16207,6 +16264,11 @@ var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
16207
16264
  return;
16208
16265
  }
16209
16266
  } else if ('copy' == item.type) {
16267
+ if (isCopyScope(item) && item.selectPersonType == 1 && new Set((item.list || []).map(person => person.userId)).size > 1) {
16268
+ submitFlag = false;
16269
+ toast.fail(item.name + '只可选择一个抄送人');
16270
+ return;
16271
+ }
16210
16272
  if (item.checker.allowISNull != '1' && (!item.list || item.list.length == 0)) {
16211
16273
  submitFlag = false;
16212
16274
  toast.fail(item.name + "节点不能为空");
@@ -16233,10 +16295,10 @@ var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
16233
16295
  });
16234
16296
  ;// CONCATENATED MODULE: ./src/components/selectLine.vue?vue&type=script&lang=js
16235
16297
  /* harmony default export */ var components_selectLinevue_type_script_lang_js = (selectLinevue_type_script_lang_js);
16236
- ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/selectLine.vue?vue&type=style&index=0&id=9eacb8b4&prod&lang=css
16298
+ ;// CONCATENATED MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/selectLine.vue?vue&type=style&index=0&id=59bf336a&prod&lang=css
16237
16299
  // extracted by mini-css-extract-plugin
16238
16300
 
16239
- ;// CONCATENATED MODULE: ./src/components/selectLine.vue?vue&type=style&index=0&id=9eacb8b4&prod&lang=css
16301
+ ;// CONCATENATED MODULE: ./src/components/selectLine.vue?vue&type=style&index=0&id=59bf336a&prod&lang=css
16240
16302
 
16241
16303
  ;// CONCATENATED MODULE: ./src/components/selectLine.vue
16242
16304
 
@@ -16249,8 +16311,8 @@ var selectLinevue_type_template_id_9eacb8b4_staticRenderFns = [];
16249
16311
 
16250
16312
  var selectLine_component = normalizeComponent(
16251
16313
  components_selectLinevue_type_script_lang_js,
16252
- selectLinevue_type_template_id_9eacb8b4_render,
16253
- selectLinevue_type_template_id_9eacb8b4_staticRenderFns,
16314
+ selectLinevue_type_template_id_59bf336a_render,
16315
+ selectLinevue_type_template_id_59bf336a_staticRenderFns,
16254
16316
  false,
16255
16317
  null,
16256
16318
  null,