widget.qw 1.0.39 → 1.0.41

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.
package/.env.development CHANGED
@@ -1,10 +1,10 @@
1
1
  NODE_ENV ='development'
2
2
 
3
- VITE_DOMAIN= 'https://www.hbhjhx.asia'
3
+ VITE_DOMAIN= 'http://www.zjpsjdsb.online'
4
4
  VITE_TOKEN_KEY='Authorization'
5
5
  VITE_TOKEN_PREFIX='Bearer '
6
6
  VITE_NEED_LOGIN_CODE=401
7
7
  # 注意:发布时 VITE_IS_DEBUG必须配置为false
8
8
  # 本地开发时 VITE_IS_DEBUG必须配置为true
9
9
  VITE_IS_DEBUG=true
10
- VITE_DEBUG_TOKEN= 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJIb3VNdSIsInJuU3RyIjoiekRaM2g2RFpGTzZta2psYnh4cmlZUHVGNmd0SnloOTUifQ.RbYHsukUgLZ6KwtktTHByCkRBLDs4Wrjz4Vb4mGSINg'
10
+ VITE_DEBUG_TOKEN= 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJIb3VNdVhpYW9IYW8iLCJyblN0ciI6IlJaejE1UnRiZEo4bkZ6alVLd29mUEg0RzhLQUwxQzlIIn0.2YiMlmAeY_RAhgTtRxeiuyINwgveEWQ3K6PapfP9kyY'
package/build/style.css CHANGED
@@ -1,36 +1,36 @@
1
- @charset "UTF-8";.widget[data-v-56faf75c] {
1
+ @charset "UTF-8";.widget[data-v-3d293c3a] {
2
2
  text-align: center;
3
3
  padding: 15px 15px;
4
4
  }
5
- .memo[data-v-56faf75c] {
5
+ .memo[data-v-3d293c3a] {
6
6
  margin-bottom: 15px;
7
7
  }
8
- .refuse-btn[data-v-56faf75c] {
8
+ .refuse-btn[data-v-3d293c3a] {
9
9
  width: 120px;
10
10
  margin-right: 15px;
11
11
  }
12
- .pass-btn[data-v-56faf75c] {
12
+ .pass-btn[data-v-3d293c3a] {
13
13
  width: 120px;
14
14
  }
15
- .apply-btn[data-v-56faf75c] {
15
+ .apply-btn[data-v-3d293c3a] {
16
16
  width: 60vw;
17
17
  }
18
- .task-list[data-v-56faf75c] {
18
+ .task-list[data-v-3d293c3a] {
19
19
  margin-top: 15px;
20
20
  }
21
- .task-title[data-v-56faf75c] {
21
+ .task-title[data-v-3d293c3a] {
22
22
  font-size: 14px;
23
23
  font-weight: bold;
24
24
  color: #333;
25
25
  text-align: left;
26
26
  }
27
- .task-user[data-v-56faf75c] {
27
+ .task-user[data-v-3d293c3a] {
28
28
  font-size: 13px;
29
29
  color: #666;
30
30
  text-align: left;
31
31
  margin-top: 5px;
32
32
  }
33
- .audit-title[data-v-56faf75c] {
33
+ .audit-title[data-v-3d293c3a] {
34
34
  padding: 25px 15px 0 15px;
35
35
  font-size: 16px;
36
36
  font-weight: bold;
@@ -817,27 +817,27 @@
817
817
  /* 防止压缩 */
818
818
  }
819
819
 
820
- .widget[data-v-210abf3c] {
820
+ .widget[data-v-655ddd86] {
821
821
  /* 统一字段间距 */
822
822
  }
823
- .widget[data-v-210abf3c] .van-cell {
823
+ .widget[data-v-655ddd86] .van-cell {
824
824
  align-items: center;
825
825
  }
826
- .widget[data-v-210abf3c] .van-field__label {
826
+ .widget[data-v-655ddd86] .van-field__label {
827
827
  width: 90px;
828
828
  flex: none;
829
829
  }
830
- .widget .readonly-field[data-v-210abf3c] {
830
+ .widget .readonly-field[data-v-655ddd86] {
831
831
  /* 添加必填星号对齐 */
832
832
  }
833
- .widget .readonly-field[data-v-210abf3c] .van-field__control {
833
+ .widget .readonly-field[data-v-655ddd86] .van-field__control {
834
834
  color: #323233;
835
835
  /* 修改文字颜色与普通字段一致 */
836
836
  padding-right: 16px;
837
837
  }
838
- .widget .readonly-field.van-field--required[data-v-210abf3c] .van-field__label::before {
838
+ .widget .readonly-field.van-field--required[data-v-655ddd86] .van-field__label::before {
839
839
  margin-right: 4px;
840
840
  }
841
- .widget .readonly-field[data-v-210abf3c] {
841
+ .widget .readonly-field[data-v-655ddd86] {
842
842
  margin: 4px 0;
843
843
  }
@@ -15755,7 +15755,7 @@ var lodash$1 = { exports: {} };
15755
15755
  }).call(commonjsGlobal);
15756
15756
  })(lodash$1, lodash$1.exports);
15757
15757
  var lodash = lodash$1.exports;
15758
- var AuditBar_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => ".widget[data-v-56faf75c] {\n text-align: center;\n padding: 15px 15px;\n}\n.memo[data-v-56faf75c] {\n margin-bottom: 15px;\n}\n.refuse-btn[data-v-56faf75c] {\n width: 120px;\n margin-right: 15px;\n}\n.pass-btn[data-v-56faf75c] {\n width: 120px;\n}\n.apply-btn[data-v-56faf75c] {\n width: 60vw;\n}\n.task-list[data-v-56faf75c] {\n margin-top: 15px;\n}\n.task-title[data-v-56faf75c] {\n font-size: 14px;\n font-weight: bold;\n color: #333;\n text-align: left;\n}\n.task-user[data-v-56faf75c] {\n font-size: 13px;\n color: #666;\n text-align: left;\n margin-top: 5px;\n}\n.audit-title[data-v-56faf75c] {\n padding: 25px 15px 0 15px;\n font-size: 16px;\n font-weight: bold;\n color: #666;\n text-align: left;\n}")();
15758
+ var AuditBar_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => ".widget[data-v-3d293c3a] {\n text-align: center;\n padding: 15px 15px;\n}\n.memo[data-v-3d293c3a] {\n margin-bottom: 15px;\n}\n.refuse-btn[data-v-3d293c3a] {\n width: 120px;\n margin-right: 15px;\n}\n.pass-btn[data-v-3d293c3a] {\n width: 120px;\n}\n.apply-btn[data-v-3d293c3a] {\n width: 60vw;\n}\n.task-list[data-v-3d293c3a] {\n margin-top: 15px;\n}\n.task-title[data-v-3d293c3a] {\n font-size: 14px;\n font-weight: bold;\n color: #333;\n text-align: left;\n}\n.task-user[data-v-3d293c3a] {\n font-size: 13px;\n color: #666;\n text-align: left;\n margin-top: 5px;\n}\n.audit-title[data-v-3d293c3a] {\n padding: 25px 15px 0 15px;\n font-size: 16px;\n font-weight: bold;\n color: #666;\n text-align: left;\n}")();
15759
15759
  var AuditBar_vue_vue_type_style_index_1_lang = /* @__PURE__ */ (() => "\n:root:root {\r\n --van-popover-action-width: 70vw;\n}\r\n")();
15760
15760
  var _export_sfc = (sfc, props) => {
15761
15761
  const target = sfc.__vccOpts || sfc;
@@ -15870,6 +15870,7 @@ const _sfc_main$u = {
15870
15870
  emit("auth", res);
15871
15871
  };
15872
15872
  const getAuth = (fieldAuth) => {
15873
+ console.log("+++ getAuth +++++++++++++", fieldAuth);
15873
15874
  let defaultCondition = "readonly";
15874
15875
  if (!fieldAuth) {
15875
15876
  return defaultCondition;
@@ -16079,7 +16080,7 @@ const _sfc_main$u = {
16079
16080
  };
16080
16081
  }
16081
16082
  };
16082
- var AuditBar = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["__scopeId", "data-v-56faf75c"]]);
16083
+ var AuditBar = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["__scopeId", "data-v-3d293c3a"]]);
16083
16084
  const isClient = typeof window !== "undefined" && typeof document !== "undefined";
16084
16085
  typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
16085
16086
  const isDef = (val) => typeof val !== "undefined";
@@ -20583,8 +20584,12 @@ const _sfc_main$1 = {
20583
20584
  __name: "CascaderPicker",
20584
20585
  props: {
20585
20586
  modelValue: {
20586
- type: String,
20587
- default: ""
20587
+ type: [String, Array, Number],
20588
+ default: null
20589
+ },
20590
+ multiple: {
20591
+ type: Boolean,
20592
+ default: false
20588
20593
  },
20589
20594
  label: {
20590
20595
  type: String,
@@ -20628,7 +20633,8 @@ const _sfc_main$1 = {
20628
20633
  const props = __props;
20629
20634
  const data2 = reactive({
20630
20635
  isShowPop: false,
20631
- selectedNode: {}
20636
+ selectedNodes: [],
20637
+ selectedNodeId: null
20632
20638
  });
20633
20639
  const modelValue = useVModel(props, "modelValue", emit);
20634
20640
  const {
@@ -20640,13 +20646,47 @@ const _sfc_main$1 = {
20640
20646
  onMounted(() => {
20641
20647
  });
20642
20648
  const onSelect = (node) => {
20643
- data2.selectedNode = node;
20644
- emit("select", data2.selectedNode);
20649
+ if (!props.multiple) {
20650
+ data2.selectedNodes = [node];
20651
+ emit("select", data2.selectedNodes[0]);
20652
+ modelValue.value = node.id;
20653
+ } else {
20654
+ let one = data2.selectedNodes.find((item) => item.id === node.id);
20655
+ if (!one)
20656
+ data2.selectedNodes = [...data2.selectedNodes, node];
20657
+ emit("select", data2.selectedNodes);
20658
+ modelValue.value = data2.selectedNodes.map((item) => item.id);
20659
+ }
20645
20660
  };
20646
- const onDelete = () => {
20647
- data2.selectedNode = {};
20648
- modelValue.value = null;
20661
+ const onDelete = (idx) => {
20662
+ if (!props.multiple) {
20663
+ modelValue.value = null;
20664
+ } else {
20665
+ modelValue.value.splice(idx, 1);
20666
+ }
20649
20667
  };
20668
+ watch(() => JSON.stringify(modelValue.value), (n, o) => __async(this, null, function* () {
20669
+ if (!props.multiple) {
20670
+ data2.selectedNodeId = modelValue.value;
20671
+ } else {
20672
+ data2.selectedNodes = [];
20673
+ modelValue.value.forEach((id) => __async(this, null, function* () {
20674
+ let params = {};
20675
+ params.id = id;
20676
+ params.isReturnParent = false;
20677
+ params.hasChildren = false;
20678
+ params.hasUsers = true;
20679
+ yield props.idQueryNode(params, (node) => {
20680
+ let one = util.findNode(id, node.children);
20681
+ if (one) {
20682
+ data2.selectedNodes = [...data2.selectedNodes, one];
20683
+ }
20684
+ });
20685
+ }));
20686
+ }
20687
+ }), {
20688
+ immediate: true
20689
+ });
20650
20690
  return (_ctx, _cache) => {
20651
20691
  const _component_van_tag = resolveComponent("van-tag");
20652
20692
  const _component_van_field = resolveComponent("van-field");
@@ -20665,7 +20705,7 @@ const _sfc_main$1 = {
20665
20705
  _: 2
20666
20706
  }, [unref(modelValue) ? {
20667
20707
  name: "input",
20668
- fn: withCtx(() => [unref(modelValue) ? (openBlock(), createBlock(_component_van_tag, {
20708
+ fn: withCtx(() => [!props.multiple ? (openBlock(), createBlock(_component_van_tag, {
20669
20709
  key: 0,
20670
20710
  class: "selected-node",
20671
20711
  closeable: !unref(isDisabled),
@@ -20676,15 +20716,30 @@ const _sfc_main$1 = {
20676
20716
  }, {
20677
20717
  default: withCtx(() => {
20678
20718
  var _a;
20679
- return [createTextVNode(toDisplayString((_a = data2.selectedNode) == null ? void 0 : _a.path), 1)];
20719
+ return [createTextVNode(toDisplayString((_a = data2.selectedNodes[0]) == null ? void 0 : _a.path), 1)];
20680
20720
  }),
20681
20721
  _: 1
20682
- }, 8, ["closeable", "onClose"])) : createCommentVNode("", true)])
20722
+ }, 8, ["closeable", "onClose"])) : createCommentVNode("", true), props.multiple ? (openBlock(true), createElementBlock(Fragment, {
20723
+ key: 1
20724
+ }, renderList(data2.selectedNodes, (item, i) => {
20725
+ return openBlock(), createBlock(_component_van_tag, {
20726
+ class: "selected-node",
20727
+ key: i,
20728
+ closeable: !unref(isDisabled),
20729
+ color: "#fff",
20730
+ "text-color": "#333",
20731
+ size: "medium",
20732
+ onClose: withModifiers(($event) => onDelete(i), ["stop"])
20733
+ }, {
20734
+ default: withCtx(() => [createTextVNode(toDisplayString(item.path), 1)]),
20735
+ _: 2
20736
+ }, 1032, ["closeable", "onClose"]);
20737
+ }), 128)) : createCommentVNode("", true)])
20683
20738
  } : void 0]), 1032, ["label", "required", "rules", "disabled", "placeholder", "is-link"])) : createCommentVNode("", true), createVNode(CascaderPop, {
20684
20739
  show: data2.isShowPop,
20685
20740
  "onUpdate:show": _cache[1] || (_cache[1] = ($event) => data2.isShowPop = $event),
20686
- modelValue: unref(modelValue),
20687
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => isRef(modelValue) ? modelValue.value = $event : null),
20741
+ modelValue: data2.selectedNodeId,
20742
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => data2.selectedNodeId = $event),
20688
20743
  placeholder: props.placeholder,
20689
20744
  onSelect,
20690
20745
  keywordQueryNode: props.keywordQueryNode,
@@ -20693,16 +20748,16 @@ const _sfc_main$1 = {
20693
20748
  };
20694
20749
  }
20695
20750
  };
20696
- var SingleApiPicker_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => '@charset "UTF-8";\n.widget[data-v-210abf3c] {\n /* \u7EDF\u4E00\u5B57\u6BB5\u95F4\u8DDD */\n}\n.widget[data-v-210abf3c] .van-cell {\n align-items: center;\n}\n.widget[data-v-210abf3c] .van-field__label {\n width: 90px;\n flex: none;\n}\n.widget .readonly-field[data-v-210abf3c] {\n /* \u6DFB\u52A0\u5FC5\u586B\u661F\u53F7\u5BF9\u9F50 */\n}\n.widget .readonly-field[data-v-210abf3c] .van-field__control {\n color: #323233;\n /* \u4FEE\u6539\u6587\u5B57\u989C\u8272\u4E0E\u666E\u901A\u5B57\u6BB5\u4E00\u81F4 */\n padding-right: 16px;\n}\n.widget .readonly-field.van-field--required[data-v-210abf3c] .van-field__label::before {\n margin-right: 4px;\n}\n.widget .readonly-field[data-v-210abf3c] {\n margin: 4px 0;\n}')();
20751
+ var SingleApiPicker_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => '@charset "UTF-8";\n.widget[data-v-655ddd86] {\n /* \u7EDF\u4E00\u5B57\u6BB5\u95F4\u8DDD */\n}\n.widget[data-v-655ddd86] .van-cell {\n align-items: center;\n}\n.widget[data-v-655ddd86] .van-field__label {\n width: 90px;\n flex: none;\n}\n.widget .readonly-field[data-v-655ddd86] {\n /* \u6DFB\u52A0\u5FC5\u586B\u661F\u53F7\u5BF9\u9F50 */\n}\n.widget .readonly-field[data-v-655ddd86] .van-field__control {\n color: #323233;\n /* \u4FEE\u6539\u6587\u5B57\u989C\u8272\u4E0E\u666E\u901A\u5B57\u6BB5\u4E00\u81F4 */\n padding-right: 16px;\n}\n.widget .readonly-field.van-field--required[data-v-655ddd86] .van-field__label::before {\n margin-right: 4px;\n}\n.widget .readonly-field[data-v-655ddd86] {\n margin: 4px 0;\n}')();
20697
20752
  const _hoisted_1 = {
20698
20753
  class: "widget"
20699
20754
  };
20700
20755
  const _sfc_main = {
20701
20756
  __name: "SingleApiPicker",
20702
20757
  props: {
20703
- modelValue: {
20704
- type: String,
20705
- default: null
20758
+ multiple: {
20759
+ type: Boolean,
20760
+ default: false
20706
20761
  },
20707
20762
  label: {
20708
20763
  type: String,
@@ -20771,7 +20826,8 @@ const _sfc_main = {
20771
20826
  const _component_van_field = resolveComponent("van-field");
20772
20827
  const _component_van_picker = resolveComponent("van-picker");
20773
20828
  const _component_van_popup = resolveComponent("van-popup");
20774
- return openBlock(), createElementBlock("div", _hoisted_1, [createVNode(_component_van_field, {
20829
+ return openBlock(), createElementBlock("div", _hoisted_1, [!unref(isGone) && !props.multiple ? (openBlock(), createBlock(_component_van_field, {
20830
+ key: 0,
20775
20831
  modelValue: unref(formatLabel),
20776
20832
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(formatLabel) ? formatLabel.value = $event : null),
20777
20833
  "is-link": !unref(isReadonly) && !unref(isDisabled),
@@ -20781,7 +20837,7 @@ const _sfc_main = {
20781
20837
  required: unref(isRequired),
20782
20838
  disabled: unref(isDisabled),
20783
20839
  onClick: onShow
20784
- }, null, 8, ["modelValue", "is-link", "label", "placeholder", "required", "disabled"]), createVNode(_component_van_popup, {
20840
+ }, null, 8, ["modelValue", "is-link", "label", "placeholder", "required", "disabled"])) : createCommentVNode("", true), createVNode(_component_van_popup, {
20785
20841
  show: data2.isShow,
20786
20842
  "onUpdate:show": _cache[1] || (_cache[1] = ($event) => data2.isShow = $event),
20787
20843
  "destroy-on-close": "",
@@ -20798,7 +20854,7 @@ const _sfc_main = {
20798
20854
  };
20799
20855
  }
20800
20856
  };
20801
- var SingleApiPicker = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-210abf3c"]]);
20857
+ var SingleApiPicker = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-655ddd86"]]);
20802
20858
  const secret_notify = () => {
20803
20859
  showNotify({ type: "danger", message: "\u4E25\u683C\u6267\u884C\u4FE1\u606F\u4FDD\u5BC6\u8981\u6C42\uFF0C\u5207\u5B9E\u9632\u8303\u4F01\u4E1A\u6CC4\u5BC6\u98CE\u9669", duration: 3e3 });
20804
20860
  };
@@ -15758,7 +15758,7 @@ var __async = (__this, __arguments, generator) => {
15758
15758
  }).call(commonjsGlobal);
15759
15759
  })(lodash$1, lodash$1.exports);
15760
15760
  var lodash = lodash$1.exports;
15761
- var AuditBar_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => ".widget[data-v-56faf75c] {\n text-align: center;\n padding: 15px 15px;\n}\n.memo[data-v-56faf75c] {\n margin-bottom: 15px;\n}\n.refuse-btn[data-v-56faf75c] {\n width: 120px;\n margin-right: 15px;\n}\n.pass-btn[data-v-56faf75c] {\n width: 120px;\n}\n.apply-btn[data-v-56faf75c] {\n width: 60vw;\n}\n.task-list[data-v-56faf75c] {\n margin-top: 15px;\n}\n.task-title[data-v-56faf75c] {\n font-size: 14px;\n font-weight: bold;\n color: #333;\n text-align: left;\n}\n.task-user[data-v-56faf75c] {\n font-size: 13px;\n color: #666;\n text-align: left;\n margin-top: 5px;\n}\n.audit-title[data-v-56faf75c] {\n padding: 25px 15px 0 15px;\n font-size: 16px;\n font-weight: bold;\n color: #666;\n text-align: left;\n}")();
15761
+ var AuditBar_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => ".widget[data-v-3d293c3a] {\n text-align: center;\n padding: 15px 15px;\n}\n.memo[data-v-3d293c3a] {\n margin-bottom: 15px;\n}\n.refuse-btn[data-v-3d293c3a] {\n width: 120px;\n margin-right: 15px;\n}\n.pass-btn[data-v-3d293c3a] {\n width: 120px;\n}\n.apply-btn[data-v-3d293c3a] {\n width: 60vw;\n}\n.task-list[data-v-3d293c3a] {\n margin-top: 15px;\n}\n.task-title[data-v-3d293c3a] {\n font-size: 14px;\n font-weight: bold;\n color: #333;\n text-align: left;\n}\n.task-user[data-v-3d293c3a] {\n font-size: 13px;\n color: #666;\n text-align: left;\n margin-top: 5px;\n}\n.audit-title[data-v-3d293c3a] {\n padding: 25px 15px 0 15px;\n font-size: 16px;\n font-weight: bold;\n color: #666;\n text-align: left;\n}")();
15762
15762
  var AuditBar_vue_vue_type_style_index_1_lang = /* @__PURE__ */ (() => "\n:root:root {\r\n --van-popover-action-width: 70vw;\n}\r\n")();
15763
15763
  var _export_sfc = (sfc, props) => {
15764
15764
  const target = sfc.__vccOpts || sfc;
@@ -15873,6 +15873,7 @@ var __async = (__this, __arguments, generator) => {
15873
15873
  emit("auth", res);
15874
15874
  };
15875
15875
  const getAuth = (fieldAuth) => {
15876
+ console.log("+++ getAuth +++++++++++++", fieldAuth);
15876
15877
  let defaultCondition = "readonly";
15877
15878
  if (!fieldAuth) {
15878
15879
  return defaultCondition;
@@ -16082,7 +16083,7 @@ var __async = (__this, __arguments, generator) => {
16082
16083
  };
16083
16084
  }
16084
16085
  };
16085
- var AuditBar = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["__scopeId", "data-v-56faf75c"]]);
16086
+ var AuditBar = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["__scopeId", "data-v-3d293c3a"]]);
16086
16087
  const isClient = typeof window !== "undefined" && typeof document !== "undefined";
16087
16088
  typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
16088
16089
  const isDef = (val) => typeof val !== "undefined";
@@ -20586,8 +20587,12 @@ var __async = (__this, __arguments, generator) => {
20586
20587
  __name: "CascaderPicker",
20587
20588
  props: {
20588
20589
  modelValue: {
20589
- type: String,
20590
- default: ""
20590
+ type: [String, Array, Number],
20591
+ default: null
20592
+ },
20593
+ multiple: {
20594
+ type: Boolean,
20595
+ default: false
20591
20596
  },
20592
20597
  label: {
20593
20598
  type: String,
@@ -20631,7 +20636,8 @@ var __async = (__this, __arguments, generator) => {
20631
20636
  const props = __props;
20632
20637
  const data2 = vue.reactive({
20633
20638
  isShowPop: false,
20634
- selectedNode: {}
20639
+ selectedNodes: [],
20640
+ selectedNodeId: null
20635
20641
  });
20636
20642
  const modelValue = useVModel(props, "modelValue", emit);
20637
20643
  const {
@@ -20643,13 +20649,47 @@ var __async = (__this, __arguments, generator) => {
20643
20649
  vue.onMounted(() => {
20644
20650
  });
20645
20651
  const onSelect = (node) => {
20646
- data2.selectedNode = node;
20647
- emit("select", data2.selectedNode);
20652
+ if (!props.multiple) {
20653
+ data2.selectedNodes = [node];
20654
+ emit("select", data2.selectedNodes[0]);
20655
+ modelValue.value = node.id;
20656
+ } else {
20657
+ let one = data2.selectedNodes.find((item) => item.id === node.id);
20658
+ if (!one)
20659
+ data2.selectedNodes = [...data2.selectedNodes, node];
20660
+ emit("select", data2.selectedNodes);
20661
+ modelValue.value = data2.selectedNodes.map((item) => item.id);
20662
+ }
20648
20663
  };
20649
- const onDelete = () => {
20650
- data2.selectedNode = {};
20651
- modelValue.value = null;
20664
+ const onDelete = (idx) => {
20665
+ if (!props.multiple) {
20666
+ modelValue.value = null;
20667
+ } else {
20668
+ modelValue.value.splice(idx, 1);
20669
+ }
20652
20670
  };
20671
+ vue.watch(() => JSON.stringify(modelValue.value), (n, o) => __async(this, null, function* () {
20672
+ if (!props.multiple) {
20673
+ data2.selectedNodeId = modelValue.value;
20674
+ } else {
20675
+ data2.selectedNodes = [];
20676
+ modelValue.value.forEach((id) => __async(this, null, function* () {
20677
+ let params = {};
20678
+ params.id = id;
20679
+ params.isReturnParent = false;
20680
+ params.hasChildren = false;
20681
+ params.hasUsers = true;
20682
+ yield props.idQueryNode(params, (node) => {
20683
+ let one = util.findNode(id, node.children);
20684
+ if (one) {
20685
+ data2.selectedNodes = [...data2.selectedNodes, one];
20686
+ }
20687
+ });
20688
+ }));
20689
+ }
20690
+ }), {
20691
+ immediate: true
20692
+ });
20653
20693
  return (_ctx, _cache) => {
20654
20694
  const _component_van_tag = vue.resolveComponent("van-tag");
20655
20695
  const _component_van_field = vue.resolveComponent("van-field");
@@ -20668,7 +20708,7 @@ var __async = (__this, __arguments, generator) => {
20668
20708
  _: 2
20669
20709
  }, [vue.unref(modelValue) ? {
20670
20710
  name: "input",
20671
- fn: vue.withCtx(() => [vue.unref(modelValue) ? (vue.openBlock(), vue.createBlock(_component_van_tag, {
20711
+ fn: vue.withCtx(() => [!props.multiple ? (vue.openBlock(), vue.createBlock(_component_van_tag, {
20672
20712
  key: 0,
20673
20713
  class: "selected-node",
20674
20714
  closeable: !vue.unref(isDisabled),
@@ -20679,15 +20719,30 @@ var __async = (__this, __arguments, generator) => {
20679
20719
  }, {
20680
20720
  default: vue.withCtx(() => {
20681
20721
  var _a;
20682
- return [vue.createTextVNode(vue.toDisplayString((_a = data2.selectedNode) == null ? void 0 : _a.path), 1)];
20722
+ return [vue.createTextVNode(vue.toDisplayString((_a = data2.selectedNodes[0]) == null ? void 0 : _a.path), 1)];
20683
20723
  }),
20684
20724
  _: 1
20685
- }, 8, ["closeable", "onClose"])) : vue.createCommentVNode("", true)])
20725
+ }, 8, ["closeable", "onClose"])) : vue.createCommentVNode("", true), props.multiple ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, {
20726
+ key: 1
20727
+ }, vue.renderList(data2.selectedNodes, (item, i) => {
20728
+ return vue.openBlock(), vue.createBlock(_component_van_tag, {
20729
+ class: "selected-node",
20730
+ key: i,
20731
+ closeable: !vue.unref(isDisabled),
20732
+ color: "#fff",
20733
+ "text-color": "#333",
20734
+ size: "medium",
20735
+ onClose: vue.withModifiers(($event) => onDelete(i), ["stop"])
20736
+ }, {
20737
+ default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString(item.path), 1)]),
20738
+ _: 2
20739
+ }, 1032, ["closeable", "onClose"]);
20740
+ }), 128)) : vue.createCommentVNode("", true)])
20686
20741
  } : void 0]), 1032, ["label", "required", "rules", "disabled", "placeholder", "is-link"])) : vue.createCommentVNode("", true), vue.createVNode(CascaderPop, {
20687
20742
  show: data2.isShowPop,
20688
20743
  "onUpdate:show": _cache[1] || (_cache[1] = ($event) => data2.isShowPop = $event),
20689
- modelValue: vue.unref(modelValue),
20690
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.isRef(modelValue) ? modelValue.value = $event : null),
20744
+ modelValue: data2.selectedNodeId,
20745
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => data2.selectedNodeId = $event),
20691
20746
  placeholder: props.placeholder,
20692
20747
  onSelect,
20693
20748
  keywordQueryNode: props.keywordQueryNode,
@@ -20696,16 +20751,16 @@ var __async = (__this, __arguments, generator) => {
20696
20751
  };
20697
20752
  }
20698
20753
  };
20699
- var SingleApiPicker_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => '@charset "UTF-8";\n.widget[data-v-210abf3c] {\n /* \u7EDF\u4E00\u5B57\u6BB5\u95F4\u8DDD */\n}\n.widget[data-v-210abf3c] .van-cell {\n align-items: center;\n}\n.widget[data-v-210abf3c] .van-field__label {\n width: 90px;\n flex: none;\n}\n.widget .readonly-field[data-v-210abf3c] {\n /* \u6DFB\u52A0\u5FC5\u586B\u661F\u53F7\u5BF9\u9F50 */\n}\n.widget .readonly-field[data-v-210abf3c] .van-field__control {\n color: #323233;\n /* \u4FEE\u6539\u6587\u5B57\u989C\u8272\u4E0E\u666E\u901A\u5B57\u6BB5\u4E00\u81F4 */\n padding-right: 16px;\n}\n.widget .readonly-field.van-field--required[data-v-210abf3c] .van-field__label::before {\n margin-right: 4px;\n}\n.widget .readonly-field[data-v-210abf3c] {\n margin: 4px 0;\n}')();
20754
+ var SingleApiPicker_vue_vue_type_style_index_0_scoped_true_lang = /* @__PURE__ */ (() => '@charset "UTF-8";\n.widget[data-v-655ddd86] {\n /* \u7EDF\u4E00\u5B57\u6BB5\u95F4\u8DDD */\n}\n.widget[data-v-655ddd86] .van-cell {\n align-items: center;\n}\n.widget[data-v-655ddd86] .van-field__label {\n width: 90px;\n flex: none;\n}\n.widget .readonly-field[data-v-655ddd86] {\n /* \u6DFB\u52A0\u5FC5\u586B\u661F\u53F7\u5BF9\u9F50 */\n}\n.widget .readonly-field[data-v-655ddd86] .van-field__control {\n color: #323233;\n /* \u4FEE\u6539\u6587\u5B57\u989C\u8272\u4E0E\u666E\u901A\u5B57\u6BB5\u4E00\u81F4 */\n padding-right: 16px;\n}\n.widget .readonly-field.van-field--required[data-v-655ddd86] .van-field__label::before {\n margin-right: 4px;\n}\n.widget .readonly-field[data-v-655ddd86] {\n margin: 4px 0;\n}')();
20700
20755
  const _hoisted_1 = {
20701
20756
  class: "widget"
20702
20757
  };
20703
20758
  const _sfc_main = {
20704
20759
  __name: "SingleApiPicker",
20705
20760
  props: {
20706
- modelValue: {
20707
- type: String,
20708
- default: null
20761
+ multiple: {
20762
+ type: Boolean,
20763
+ default: false
20709
20764
  },
20710
20765
  label: {
20711
20766
  type: String,
@@ -20774,7 +20829,8 @@ var __async = (__this, __arguments, generator) => {
20774
20829
  const _component_van_field = vue.resolveComponent("van-field");
20775
20830
  const _component_van_picker = vue.resolveComponent("van-picker");
20776
20831
  const _component_van_popup = vue.resolveComponent("van-popup");
20777
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [vue.createVNode(_component_van_field, {
20832
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [!vue.unref(isGone) && !props.multiple ? (vue.openBlock(), vue.createBlock(_component_van_field, {
20833
+ key: 0,
20778
20834
  modelValue: vue.unref(formatLabel),
20779
20835
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.isRef(formatLabel) ? formatLabel.value = $event : null),
20780
20836
  "is-link": !vue.unref(isReadonly) && !vue.unref(isDisabled),
@@ -20784,7 +20840,7 @@ var __async = (__this, __arguments, generator) => {
20784
20840
  required: vue.unref(isRequired),
20785
20841
  disabled: vue.unref(isDisabled),
20786
20842
  onClick: onShow
20787
- }, null, 8, ["modelValue", "is-link", "label", "placeholder", "required", "disabled"]), vue.createVNode(_component_van_popup, {
20843
+ }, null, 8, ["modelValue", "is-link", "label", "placeholder", "required", "disabled"])) : vue.createCommentVNode("", true), vue.createVNode(_component_van_popup, {
20788
20844
  show: data2.isShow,
20789
20845
  "onUpdate:show": _cache[1] || (_cache[1] = ($event) => data2.isShow = $event),
20790
20846
  "destroy-on-close": "",
@@ -20801,7 +20857,7 @@ var __async = (__this, __arguments, generator) => {
20801
20857
  };
20802
20858
  }
20803
20859
  };
20804
- var SingleApiPicker = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-210abf3c"]]);
20860
+ var SingleApiPicker = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-655ddd86"]]);
20805
20861
  const secret_notify = () => {
20806
20862
  showNotify({ type: "danger", message: "\u4E25\u683C\u6267\u884C\u4FE1\u606F\u4FDD\u5BC6\u8981\u6C42\uFF0C\u5207\u5B9E\u9632\u8303\u4F01\u4E1A\u6CC4\u5BC6\u98CE\u9669", duration: 3e3 });
20807
20863
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "widget.qw",
3
3
  "private": false,
4
- "version": "1.0.39",
4
+ "version": "1.0.41",
5
5
  "description": "marqstree Vue3组件库",
6
6
  "main": "build/widget.qw.es.js",
7
7
  "keywords": [
@@ -137,6 +137,7 @@ const updateAuth = () => {
137
137
 
138
138
  // 根据条件列表获取权限
139
139
  const getAuth = (fieldAuth) => {
140
+ console.log('+++ getAuth +++++++++++++', fieldAuth)
140
141
  // 默认权限: 只读
141
142
  let defaultCondition = 'readonly'
142
143
 
@@ -3,15 +3,19 @@
3
3
  :disabled="isDisabled" :placeholder="props.placeholder" :is-link="isReadonly ? false : true"
4
4
  @click="data.isShowPop = !isReadonly" label-class="label">
5
5
  <template #input v-if="modelValue">
6
- <van-tag class="selected-node" v-if="modelValue" :closeable="!isDisabled" color="#fff" text-color="#333"
7
- size="medium" @close.stop="onDelete">
8
- {{ data.selectedNode?.path }}
6
+ <van-tag class="selected-node" v-if="!props.multiple" :closeable="!isDisabled" color="#fff"
7
+ text-color="#333" size="medium" @close.stop="onDelete">
8
+ {{ data.selectedNodes[0]?.path }}
9
+ </van-tag>
10
+ <van-tag class="selected-node" v-if="props.multiple" v-for="(item, i) in data.selectedNodes" :key="i"
11
+ :closeable="!isDisabled" color="#fff" text-color="#333" size="medium" @close.stop="onDelete(i)">
12
+ {{ item.path }}
9
13
  </van-tag>
10
14
  </template>
11
15
  </van-field>
12
16
 
13
- <CascaderPop v-model:show="data.isShowPop" v-model="modelValue" :placeholder="props.placeholder" @select="onSelect"
14
- :keywordQueryNode="props.keywordQueryNode" :idQueryNode="props.idQueryNode" />
17
+ <CascaderPop v-model:show="data.isShowPop" v-model="data.selectedNodeId" :placeholder="props.placeholder"
18
+ @select="onSelect" :keywordQueryNode="props.keywordQueryNode" :idQueryNode="props.idQueryNode" />
15
19
  </template>
16
20
 
17
21
  <script setup>
@@ -22,8 +26,12 @@ import CascaderPop from './CascaderPop.vue'
22
26
 
23
27
  const props = defineProps({
24
28
  modelValue: {
25
- type: String,
26
- default: '',
29
+ type: [String, Array, Number],
30
+ default: null,
31
+ },
32
+ multiple: {
33
+ type: Boolean,
34
+ default: false
27
35
  },
28
36
  label: {
29
37
  type: String,
@@ -62,7 +70,8 @@ const props = defineProps({
62
70
  // 弹出层
63
71
  const data = reactive({
64
72
  isShowPop: false,
65
- selectedNode: {}
73
+ selectedNodes: [],
74
+ selectedNodeId: null
66
75
  })
67
76
 
68
77
  // 定义emit
@@ -75,14 +84,51 @@ onMounted(() => {
75
84
  })
76
85
 
77
86
  const onSelect = (node) => {
78
- data.selectedNode = node
79
- emit('select', data.selectedNode)
87
+ if (!props.multiple) {
88
+ data.selectedNodes = [node]
89
+ emit('select', data.selectedNodes[0])
90
+ modelValue.value = node.id
91
+ }
92
+ else {
93
+ let one = data.selectedNodes.find(item => item.id === node.id)
94
+ if (!one)
95
+ data.selectedNodes = [...data.selectedNodes, node]
96
+ emit('select', data.selectedNodes)
97
+ modelValue.value = data.selectedNodes.map(item=>item.id)
98
+ }
80
99
  }
81
100
 
82
- const onDelete = () => {
83
- data.selectedNode = {}
84
- modelValue.value = null
101
+ const onDelete = (idx) => {
102
+ if (!props.multiple) {
103
+ modelValue.value = null
104
+ } else {
105
+ modelValue.value.splice(idx, 1)
106
+ }
85
107
  }
108
+
109
+ watch(() => JSON.stringify(modelValue.value), async (n, o) => {
110
+ if (!props.multiple) {
111
+ data.selectedNodeId = modelValue.value
112
+ } else {
113
+ data.selectedNodes = []
114
+ modelValue.value.forEach(async(id) => {
115
+ let params = {}
116
+ params.id = id
117
+ params.isReturnParent = false
118
+ params.hasChildren = false
119
+ params.hasUsers=true
120
+ await props.idQueryNode(params,(node)=>{
121
+ let one = util.findNode(id, node.children)
122
+ if(one){
123
+ data.selectedNodes = [...data.selectedNodes, one]
124
+ }
125
+ })
126
+ })
127
+
128
+ }
129
+ }, {
130
+ immediate: true
131
+ })
86
132
  </script>
87
133
 
88
134
  <style scoped></style>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div class="widget">
3
- <van-field v-model="formatLabel" :is-link="!isReadonly && !isDisabled" :label="props.label" :placeholder="props.placeholder" readonly
3
+ <van-field v-if="!isGone && !props.multiple" v-model="formatLabel" :is-link="!isReadonly && !isDisabled" :label="props.label" :placeholder="props.placeholder" readonly
4
4
  :required="isRequired" :disabled="isDisabled" @click="onShow" />
5
5
  <van-popup v-model:show="data.isShow" destroy-on-close round position="bottom">
6
6
  <van-picker :columns="props.options" @cancel="onCancel" @confirm="onConfirm" />
@@ -14,9 +14,9 @@ import util from '../util'
14
14
  import { useVModel } from '@vueuse/core'
15
15
 
16
16
  const props = defineProps({
17
- modelValue: {
18
- type: String,
19
- default: null
17
+ multiple:{
18
+ type:Boolean,
19
+ default:false
20
20
  },
21
21
  label: {
22
22
  type: String,
@@ -9,14 +9,283 @@
9
9
  import { onMounted, reactive } from "vue";
10
10
 
11
11
  const data = reactive({
12
- processId: 962, // 流程ID
12
+ processId: 46, // 流程ID
13
13
  // processId: null, // 流程ID
14
- mouldId: 4, // 模板ID
15
- userId: '014391',
14
+ mouldId: 70, // 模板ID
15
+ userId: 'HouMuXiaoHao',
16
16
  form:{
17
- userId: 'houmu',
18
- reason: '',
19
- areas:['base']
17
+ "createTime": "2025-08-30 16:11:59",
18
+ "updateTime": "2025-08-30 16:11:59",
19
+ "id": "JGYlNy5l",
20
+ "no": "250830001",
21
+ "processId": 46,
22
+ "projectId": "qWnOdjlZ",
23
+ "applicantId": "HouMu",
24
+ "partId": "gUxSbWTX",
25
+ "stageId": "5dnwEcR1",
26
+ "jobId": "kLhCnx6j",
27
+ "workerId": "HouMuXiaoHao",
28
+ "files": [
29
+ "http://www.zjpsjdsb.online/static//i9zX2twr.jpg"
30
+ ],
31
+ "price": 100.00,
32
+ "endTime": "2025-08-30 16:11:42",
33
+ "isPenalty": true,
34
+ "remark": "",
35
+ "isCancel": false,
36
+ "salaryId": null,
37
+ "project": {
38
+ "createTime": "2025-08-24 14:08:30",
39
+ "updateTime": "2025-08-24 14:08:30",
40
+ "id": "qWnOdjlZ",
41
+ "name": "银沙滩",
42
+ "files": null,
43
+ "price": 100000.00,
44
+ "pay": 10000.00,
45
+ "pays": [
46
+ {
47
+ "label": "首付款",
48
+ "value": 10000.00,
49
+ "time": "2025-08-27 11:26:17"
50
+ }
51
+ ],
52
+ "missions": [
53
+ {
54
+ "id": "eec37433",
55
+ "title": "点工",
56
+ "amount": 1000.00,
57
+ "finishAmount": 18.00,
58
+ "unit": "小时",
59
+ "unitPrice": 30.00,
60
+ "dayMax": 18.00
61
+ },
62
+ {
63
+ "id": "eec2a5d3",
64
+ "title": "卸货",
65
+ "amount": 2000.00,
66
+ "finishAmount": 0.00,
67
+ "unit": "个",
68
+ "unitPrice": 20.00,
69
+ "dayMax": 50.00
70
+ }
71
+ ],
72
+ "managerIds": [
73
+ "HouMu"
74
+ ],
75
+ "workerIds": [
76
+ "HouMu",
77
+ "HouMuXiaoHao",
78
+ "LiuXiaoYu"
79
+ ],
80
+ "remark": null
81
+ },
82
+ "applicant": {
83
+ "createTime": "2025-08-22 11:39:58",
84
+ "updateTime": "2025-08-22 11:39:58",
85
+ "userid": "HouMu",
86
+ "name": "侯木",
87
+ "position": "大工",
88
+ "gender": "",
89
+ "mainDepartment": "2",
90
+ "deptIds": [
91
+ "2"
92
+ ],
93
+ "mobile": null,
94
+ "telephone": "",
95
+ "avatar": "",
96
+ "address": "",
97
+ "status": 1,
98
+ "isleader": 0,
99
+ "idCardNo": null,
100
+ "salary": 100.00,
101
+ "roleIds": [
102
+ "项目经理",
103
+ "admin"
104
+ ]
105
+ },
106
+ "part": {
107
+ "createTime": "2025-08-26 11:07:27",
108
+ "updateTime": "2025-08-26 11:07:27",
109
+ "id": "gUxSbWTX",
110
+ "projectId": "qWnOdjlZ",
111
+ "treeCode": "01-01-02-01-02",
112
+ "level": 5,
113
+ "parentId": "bgNDb1vZ",
114
+ "name": "外机",
115
+ "quantity": 1,
116
+ "hasChildren": false,
117
+ "type": "空调",
118
+ "isOwnerModified": false,
119
+ "remark": null,
120
+ "state": "已开始",
121
+ "formatName": "外机空调",
122
+ "children": null,
123
+ "path": "1栋>1单元>12层>1201室>外机空调",
124
+ "paths": null
125
+ },
126
+ "stage": {
127
+ "createTime": "2025-08-26 11:09:10",
128
+ "updateTime": "2025-08-26 11:09:10",
129
+ "id": "5dnwEcR1",
130
+ "projectId": "qWnOdjlZ",
131
+ "partId": "gUxSbWTX",
132
+ "name": "连接外机喇叭口",
133
+ "orderIndex": 1,
134
+ "state": "已完成",
135
+ "quantity": 1,
136
+ "finishQuantity": 1,
137
+ "remainQuantity": 0,
138
+ "unitPrice": 1.00,
139
+ "remark": null
140
+ },
141
+ "job": {
142
+ "createTime": "2025-08-30 16:04:56",
143
+ "updateTime": "2025-08-30 16:04:56",
144
+ "id": "kLhCnx6j",
145
+ "projectId": "qWnOdjlZ",
146
+ "partId": "gUxSbWTX",
147
+ "stageId": "5dnwEcR1",
148
+ "workerId": "HouMuXiaoHao",
149
+ "finishQuantity": 1,
150
+ "unitPrice": 1.00,
151
+ "pay": 1.00,
152
+ "images": [],
153
+ "remark": "",
154
+ "salaryId": null,
155
+ "worker": {
156
+ "createTime": "2025-08-22 11:39:58",
157
+ "updateTime": "2025-08-22 11:39:58",
158
+ "userid": "HouMuXiaoHao",
159
+ "name": "侯木小号",
160
+ "position": "小工",
161
+ "gender": "",
162
+ "mainDepartment": "2",
163
+ "deptIds": [
164
+ "2"
165
+ ],
166
+ "mobile": null,
167
+ "telephone": "",
168
+ "avatar": "",
169
+ "address": "",
170
+ "status": 1,
171
+ "isleader": 0,
172
+ "idCardNo": null,
173
+ "salary": 1000.00,
174
+ "roleIds": [
175
+ "项目经理"
176
+ ]
177
+ },
178
+ "project": {
179
+ "createTime": "2025-08-24 14:08:30",
180
+ "updateTime": "2025-08-24 14:08:30",
181
+ "id": "qWnOdjlZ",
182
+ "name": "银沙滩",
183
+ "files": null,
184
+ "price": 100000.00,
185
+ "pay": 10000.00,
186
+ "pays": [
187
+ {
188
+ "label": "首付款",
189
+ "value": 10000.00,
190
+ "time": "2025-08-27 11:26:17"
191
+ }
192
+ ],
193
+ "missions": [
194
+ {
195
+ "id": "eec37433",
196
+ "title": "点工",
197
+ "amount": 1000.00,
198
+ "finishAmount": 18.00,
199
+ "unit": "小时",
200
+ "unitPrice": 30.00,
201
+ "dayMax": 18.00
202
+ },
203
+ {
204
+ "id": "eec2a5d3",
205
+ "title": "卸货",
206
+ "amount": 2000.00,
207
+ "finishAmount": 0.00,
208
+ "unit": "个",
209
+ "unitPrice": 20.00,
210
+ "dayMax": 50.00
211
+ }
212
+ ],
213
+ "managerIds": [
214
+ "HouMu"
215
+ ],
216
+ "workerIds": [
217
+ "HouMu",
218
+ "HouMuXiaoHao",
219
+ "LiuXiaoYu"
220
+ ],
221
+ "remark": null
222
+ }
223
+ },
224
+ "worker": {
225
+ "createTime": "2025-08-22 11:39:58",
226
+ "updateTime": "2025-08-22 11:39:58",
227
+ "userid": "HouMuXiaoHao",
228
+ "name": "侯木小号",
229
+ "position": "小工",
230
+ "gender": "",
231
+ "mainDepartment": "2",
232
+ "deptIds": [
233
+ "2"
234
+ ],
235
+ "mobile": null,
236
+ "telephone": "",
237
+ "avatar": "",
238
+ "address": "",
239
+ "status": 1,
240
+ "isleader": 0,
241
+ "idCardNo": null,
242
+ "salary": 1000.00,
243
+ "roleIds": [
244
+ "项目经理"
245
+ ]
246
+ },
247
+ "process": {
248
+ "id": 46,
249
+ "formId": "JGYlNy5l",
250
+ "formNo": "250830001",
251
+ "templateId": 238,
252
+ "mouldId": 70,
253
+ "mouldTitle": "整改单",
254
+ "startUserId": "HouMu",
255
+ "startUserName": "侯木",
256
+ "form": {
257
+ "id": "JGYlNy5l",
258
+ "no": "250830001",
259
+ "files": [
260
+ "http://www.zjpsjdsb.online/static//i9zX2twr.jpg"
261
+ ],
262
+ "jobId": "kLhCnx6j",
263
+ "price": 100,
264
+ "partId": "gUxSbWTX",
265
+ "remark": "",
266
+ "endTime": "2025-08-30 16:11:42",
267
+ "stageId": "5dnwEcR1",
268
+ "isCancel": false,
269
+ "salaryId": null,
270
+ "workerId": "HouMuXiaoHao",
271
+ "creatorId": null,
272
+ "isPenalty": true,
273
+ "processId": 46,
274
+ "projectId": "qWnOdjlZ",
275
+ "updaterId": "HouMu",
276
+ "createTime": "2025-08-30 16:11:59",
277
+ "updateTime": "2025-08-30 16:11:59",
278
+ "applicantId": "HouMu"
279
+ },
280
+ "state": "started",
281
+ "finishedAt": null,
282
+ "createdAt": "2025-08-30 16:11:59",
283
+ "updatedAt": "2025-08-30 16:19:12",
284
+ "deletedAt": null,
285
+ "loginUserState": "started",
286
+ "loginUserStateLabel": "待审核",
287
+ "stateLabel": "进行中"
288
+ }
20
289
  }
21
290
  })
22
291
 
Binary file