ecinc-cloud-mappaio 9.7.36 → 9.7.37

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.
@@ -1397,7 +1397,7 @@ var actions = {
1397
1397
 
1398
1398
  /***/ }),
1399
1399
 
1400
- /***/ 6914:
1400
+ /***/ 249:
1401
1401
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1402
1402
 
1403
1403
  "use strict";
@@ -2303,8 +2303,8 @@ var SysSetupvue_type_template_id_2497073a_scoped_true_render = function render()
2303
2303
  };
2304
2304
  var SysSetupvue_type_template_id_2497073a_scoped_true_staticRenderFns = [];
2305
2305
 
2306
- ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./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!./packages/ecwplat/Module/src/MenuItemForm.vue?vue&type=template&id=76a1a43d&scoped=true
2307
- var MenuItemFormvue_type_template_id_76a1a43d_scoped_true_render = function render() {
2306
+ ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./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!./packages/ecwplat/Module/src/MenuItemForm.vue?vue&type=template&id=3ebd0a76&scoped=true
2307
+ var MenuItemFormvue_type_template_id_3ebd0a76_scoped_true_render = function render() {
2308
2308
  var _vm = this,
2309
2309
  _c = _vm._self._c;
2310
2310
  return _c('el-form', {
@@ -2697,7 +2697,7 @@ var MenuItemFormvue_type_template_id_76a1a43d_scoped_true_render = function rend
2697
2697
  attrs: {
2698
2698
  "dataType": _vm.$tx('ecwplat.menuForm.allFile', '全部')
2699
2699
  }
2700
- }, [_vm._v(_vm._s(this.$tx('ecwplat.menuForm.allFile', '全部')) + "列表URL")])]), _c('td', {
2700
+ }, [_vm._v(_vm._s(_vm.$tx('ecwplat.menuForm.allFile', '全部')) + "列表URL")])]), _c('td', {
2701
2701
  staticClass: "el-table__cell tdcont tdw83",
2702
2702
  attrs: {
2703
2703
  "colspan": "3"
@@ -3800,7 +3800,7 @@ var MenuItemFormvue_type_template_id_76a1a43d_scoped_true_render = function rend
3800
3800
  }
3801
3801
  }, [_c('Icons')], 1) : _vm._e()], 1);
3802
3802
  };
3803
- var MenuItemFormvue_type_template_id_76a1a43d_scoped_true_staticRenderFns = [];
3803
+ var MenuItemFormvue_type_template_id_3ebd0a76_scoped_true_staticRenderFns = [];
3804
3804
 
3805
3805
  ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecwplat/Module/src/MenuItemForm.vue?vue&type=script&lang=js
3806
3806
  /* harmony default export */ var MenuItemFormvue_type_script_lang_js = ({
@@ -4185,7 +4185,7 @@ var MenuItemFormvue_type_template_id_76a1a43d_scoped_true_staticRenderFns = [];
4185
4185
  if (formUrl.indexOf('/dcontent/') !== -1) {
4186
4186
  formUrl = formUrl.split('/dcontent/')[1];
4187
4187
  } else if (formUrl.indexOf('@/wapp/') !== -1) {
4188
- formUrl = formUrl.split('@/wapp/')[1].replace('/\//', '.');
4188
+ formUrl = formUrl.split('@/wapp/')[1].replace('///', '.');
4189
4189
  }
4190
4190
  this.$set(this.vo, 'href', formUrl.split('.')[1]);
4191
4191
  this.$set(this.vo, 'wfEngineUrl', formUrl.split('.')[0] + '/' + formUrl.split('.')[1]);
@@ -4242,9 +4242,9 @@ var MenuItemFormvue_type_template_id_76a1a43d_scoped_true_staticRenderFns = [];
4242
4242
  });
4243
4243
  ;// CONCATENATED MODULE: ./packages/ecwplat/Module/src/MenuItemForm.vue?vue&type=script&lang=js
4244
4244
  /* harmony default export */ var src_MenuItemFormvue_type_script_lang_js = (MenuItemFormvue_type_script_lang_js);
4245
- // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[4]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecwplat/Module/src/MenuItemForm.vue?vue&type=style&index=0&id=76a1a43d&prod&scoped=true&lang=scss
4246
- var MenuItemFormvue_type_style_index_0_id_76a1a43d_prod_scoped_true_lang_scss = __webpack_require__(1908);
4247
- ;// CONCATENATED MODULE: ./packages/ecwplat/Module/src/MenuItemForm.vue?vue&type=style&index=0&id=76a1a43d&prod&scoped=true&lang=scss
4245
+ // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[4]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecwplat/Module/src/MenuItemForm.vue?vue&type=style&index=0&id=3ebd0a76&prod&scoped=true&lang=scss
4246
+ var MenuItemFormvue_type_style_index_0_id_3ebd0a76_prod_scoped_true_lang_scss = __webpack_require__(3381);
4247
+ ;// CONCATENATED MODULE: ./packages/ecwplat/Module/src/MenuItemForm.vue?vue&type=style&index=0&id=3ebd0a76&prod&scoped=true&lang=scss
4248
4248
 
4249
4249
  ;// CONCATENATED MODULE: ./packages/ecwplat/Module/src/MenuItemForm.vue
4250
4250
 
@@ -4257,11 +4257,11 @@ var MenuItemFormvue_type_style_index_0_id_76a1a43d_prod_scoped_true_lang_scss =
4257
4257
 
4258
4258
  var MenuItemForm_component = (0,componentNormalizer/* default */.A)(
4259
4259
  src_MenuItemFormvue_type_script_lang_js,
4260
- MenuItemFormvue_type_template_id_76a1a43d_scoped_true_render,
4261
- MenuItemFormvue_type_template_id_76a1a43d_scoped_true_staticRenderFns,
4260
+ MenuItemFormvue_type_template_id_3ebd0a76_scoped_true_render,
4261
+ MenuItemFormvue_type_template_id_3ebd0a76_scoped_true_staticRenderFns,
4262
4262
  false,
4263
4263
  null,
4264
- "76a1a43d",
4264
+ "3ebd0a76",
4265
4265
  null
4266
4266
 
4267
4267
  )
@@ -8756,7 +8756,7 @@ src.install = function (Vue) {
8756
8756
 
8757
8757
  /***/ }),
8758
8758
 
8759
- /***/ 431:
8759
+ /***/ 4609:
8760
8760
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8761
8761
 
8762
8762
  "use strict";
@@ -8772,6 +8772,7 @@ __webpack_require__.d(__webpack_exports__, {
8772
8772
  ShortcutProcessing: function() { return /* binding */ Wflowform_ShortcutProcessing; },
8773
8773
  SubmitDialog: function() { return /* binding */ Wflowform_SubmitDialog; },
8774
8774
  SubmitHandle: function() { return /* binding */ Wflowform_SubmitHandle; },
8775
+ VoiceInputDialog: function() { return /* binding */ Wflowform_VoiceInputDialog; },
8775
8776
  WfNodelogList: function() { return /* binding */ Wflowform_WfNodelogList; },
8776
8777
  WriteToReadIdea: function() { return /* binding */ Wflowform_WriteToReadIdea; }
8777
8778
  });
@@ -12715,8 +12716,8 @@ var SelectOuterDeputy_component = (0,componentNormalizer/* default */.A)(
12715
12716
  )
12716
12717
 
12717
12718
  /* harmony default export */ var SelectOuterDeputy = (SelectOuterDeputy_component.exports);
12718
- ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./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!./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=template&id=20bc806c&scoped=true
12719
- var SubmitHandlevue_type_template_id_20bc806c_scoped_true_render = function render() {
12719
+ ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./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!./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=template&id=6bdfbd40&scoped=true
12720
+ var SubmitHandlevue_type_template_id_6bdfbd40_scoped_true_render = function render() {
12720
12721
  var _vm = this,
12721
12722
  _c = _vm._self._c;
12722
12723
  return _vm.initiated ? _c('div', {
@@ -13501,7 +13502,7 @@ var SubmitHandlevue_type_template_id_20bc806c_scoped_true_render = function rend
13501
13502
  }
13502
13503
  })], 2) : _vm._e();
13503
13504
  };
13504
- var SubmitHandlevue_type_template_id_20bc806c_scoped_true_staticRenderFns = [];
13505
+ var SubmitHandlevue_type_template_id_6bdfbd40_scoped_true_staticRenderFns = [];
13505
13506
 
13506
13507
  ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./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!./packages/ecmapp/Wflowform/src/WfTaskNode.vue?vue&type=template&id=d1ae2f20&scoped=true
13507
13508
  var WfTaskNodevue_type_template_id_d1ae2f20_scoped_true_render = function render() {
@@ -14830,12 +14831,12 @@ var WfTaskNode_component = (0,componentNormalizer/* default */.A)(
14830
14831
  )
14831
14832
 
14832
14833
  /* harmony default export */ var WfTaskNode = (WfTaskNode_component.exports);
14833
- ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./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!./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=template&id=5924c680&scoped=true
14834
- var VoiceInputDialogvue_type_template_id_5924c680_scoped_true_render = function render() {
14834
+ ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./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!./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=template&id=cf18a87c&scoped=true
14835
+ var VoiceInputDialogvue_type_template_id_cf18a87c_scoped_true_render = function render() {
14835
14836
  var _vm = this,
14836
14837
  _c = _vm._self._c;
14837
14838
  return _c('van-popup', {
14838
- staticClass: "voice-input-popup",
14839
+ class: ['voice-input-popup', 'skin-' + _vm.currentSkin],
14839
14840
  attrs: {
14840
14841
  "round": "",
14841
14842
  "position": "bottom",
@@ -14868,6 +14869,17 @@ var VoiceInputDialogvue_type_template_id_5924c680_scoped_true_render = function
14868
14869
  })], 1), _c('div', {
14869
14870
  staticClass: "voice-popup-body"
14870
14871
  }, [_c('div', {
14872
+ staticClass: "voice-mic-wrap",
14873
+ class: {
14874
+ recording: _vm.status === 'recording'
14875
+ }
14876
+ }, [_c('span', {
14877
+ staticClass: "tech-ripple tech-ripple-1"
14878
+ }), _c('span', {
14879
+ staticClass: "tech-ripple tech-ripple-2"
14880
+ }), _c('span', {
14881
+ staticClass: "tech-ripple tech-ripple-3"
14882
+ }), _c('div', {
14871
14883
  staticClass: "voice-mic-btn",
14872
14884
  class: {
14873
14885
  recording: _vm.status === 'recording'
@@ -14895,7 +14907,7 @@ var VoiceInputDialogvue_type_template_id_5924c680_scoped_true_render = function
14895
14907
  attrs: {
14896
14908
  "d": "M768 480c0 141.4-114.6 256-256 256S256 621.4 256 480h-64c0 163.9 123.3 299 288 318.4V896H352v64h320v-64H544v-97.6C708.7 779 832 643.9 832 480h-64z"
14897
14909
  }
14898
- })])], 1), _c('div', {
14910
+ })])], 1)]), _c('div', {
14899
14911
  staticClass: "voice-status-text",
14900
14912
  class: {
14901
14913
  'is-error': _vm.status === 'error'
@@ -14958,32 +14970,46 @@ var VoiceInputDialogvue_type_template_id_5924c680_scoped_true_render = function
14958
14970
  }
14959
14971
  }, [_vm._v(_vm._s(_vm.$tx('ecmapp.wflowform.voiceFillOpinion', '填入意见')))])], 1)]);
14960
14972
  };
14961
- var VoiceInputDialogvue_type_template_id_5924c680_scoped_true_staticRenderFns = [];
14973
+ var VoiceInputDialogvue_type_template_id_cf18a87c_scoped_true_staticRenderFns = [];
14962
14974
 
14963
14975
  ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=script&lang=js
14964
- // 静音自动结束:频谱均值(0-255)超过阈值视为有人声;
14965
- // 前导静音(全程未开口)与尾部静音(说完后沉默)分别计时,审批意见多为短句,尾部可更早收尾
14976
+ // 人声判定阈值:AnalyserNode频谱均值(getByteFrequencyData,取值范围0-255)超过该值视为有人声;
14977
+ // 值越小越灵敏(环境噪声易误触发),越大越迟钝(轻声说话可能漏检),10为安静室内环境的经验值
14966
14978
  var VOICE_AVG_THRESHOLD = 10;
14979
+ // 前导静音容忍时长(毫秒):录音开始后一直未检测到人声,超过该时长自动结束并丢弃录音,
14980
+ // 避免用户点了麦克风却没说话导致录音一直挂着;10秒足够用户反应和开口
14967
14981
  var LEADING_SILENCE_MS = 10000;
14968
- var TRAILING_SILENCE_MS = 5000;
14982
+ // 尾部静音容忍时长(毫秒):已检测到人声后连续沉默超过该时长自动结束录音,
14983
+ // 审批意见多为短句,说完后无需等太久即可收尾;该值应大于句中自然停顿(约1-2秒)
14984
+ var TRAILING_SILENCE_MS = 3000;
14969
14985
  /* harmony default export */ var VoiceInputDialogvue_type_script_lang_js = ({
14970
14986
  name: 'VoiceInputDialog',
14971
14987
  props: {
14972
14988
  visible: {
14973
14989
  type: Boolean,
14974
14990
  default: false
14991
+ },
14992
+ // 界面皮肤:basic-基本版 tech-科技版,仅影响视觉样式,识别功能完全一致
14993
+ skin: {
14994
+ type: String,
14995
+ default: 'basic',
14996
+ validator: function validator(val) {
14997
+ return ['basic', 'tech'].indexOf(val) > -1;
14998
+ }
14975
14999
  }
14976
15000
  },
14977
15001
  data: function data() {
14978
15002
  return {
14979
15003
  i18npkg: 'ecmapp',
14980
15004
  moduleCode: 'wflowform',
15005
+ currentSkin: this.skin,
15006
+ // 当前皮肤(basic/tech),初始取自skin属性,头部按钮可切换
14981
15007
  status: 'idle',
14982
15008
  // idle:待录音 recording:录音中 processing:识别中(仅后端模式) done:识别完成 error:出错
14983
15009
  errorText: '',
14984
15010
  resultText: '',
14985
15011
  finalText: '',
14986
- // 浏览器模式已确认的识别文本
15012
+ // 已确认的识别文本(浏览器模式的final结果、流式模式已分段终稿)
14987
15013
  seconds: 0,
14988
15014
  timer: null,
14989
15015
  recognition: null,
@@ -14993,6 +15019,18 @@ var TRAILING_SILENCE_MS = 5000;
14993
15019
  stream: null,
14994
15020
  // 麦克风音频流
14995
15021
  audioChunks: [],
15022
+ ws: null,
15023
+ // 流式识别WebSocket连接
15024
+ wsProcessor: null,
15025
+ // 流式识别PCM采集节点
15026
+ wsSource: null,
15027
+ // 流式识别音频源节点
15028
+ streamActive: false,
15029
+ // 流式识别链路是否正常(异常时降级为整段上传)
15030
+ streamWaitingDone: false,
15031
+ // 已发stop,等待服务端最终结果
15032
+ streamDoneTimer: null,
15033
+ // 等待最终结果的超时兜底定时器
14996
15034
  lastVoiceAt: 0,
14997
15035
  // 最近一次检测到人声的时间戳,用于静音自动结束
14998
15036
  hasVoice: false,
@@ -15025,6 +15063,12 @@ var TRAILING_SILENCE_MS = 5000;
15025
15063
  var voiceToWord = window.voiceToWord;
15026
15064
  return voiceToWord && typeof voiceToWord === 'string' && voiceToWord !== 'browser' ? voiceToWord : '';
15027
15065
  },
15066
+ // window.voiceToWordStream为非空字符串时启用流式识别(WebSocket边说边出字),
15067
+ // 值为网关内路径如'/voice/recognize/stream',未配置则维持录完整段上传识别
15068
+ streamPath: function streamPath() {
15069
+ var streamPath = window.voiceToWordStream;
15070
+ return this.backendUrl && streamPath && typeof streamPath === 'string' ? streamPath : '';
15071
+ },
15028
15072
  statusText: function statusText() {
15029
15073
  switch (this.status) {
15030
15074
  case 'recording':
@@ -15051,6 +15095,9 @@ var TRAILING_SILENCE_MS = 5000;
15051
15095
  this.resetState();
15052
15096
  this.preRequestPermission();
15053
15097
  }
15098
+ },
15099
+ skin: function skin(val) {
15100
+ this.currentSkin = val;
15054
15101
  }
15055
15102
  },
15056
15103
  beforeDestroy: function beforeDestroy() {
@@ -15231,6 +15278,9 @@ var TRAILING_SILENCE_MS = 5000;
15231
15278
  }).then(function (stream) {
15232
15279
  _this4.stream = stream;
15233
15280
  _this4.audioChunks = [];
15281
+ // 立即置为录音中:MediaRecorder.onstart是异步事件,而WebSocket经本地代理握手可能先于它完成,
15282
+ // 若等onstart才置status,onopen会因status仍为idle而误关连接(code=1000)
15283
+ _this4.status = 'recording';
15234
15284
  var mimeType = window.MediaRecorder && MediaRecorder.isTypeSupported('audio/webm;codecs=opus') ? 'audio/webm;codecs=opus' : '';
15235
15285
  var mediaRecorder = mimeType ? new MediaRecorder(stream, {
15236
15286
  mimeType: mimeType
@@ -15241,7 +15291,6 @@ var TRAILING_SILENCE_MS = 5000;
15241
15291
  }
15242
15292
  };
15243
15293
  mediaRecorder.onstart = function () {
15244
- _this4.status = 'recording';
15245
15294
  _this4.startTimer();
15246
15295
  // canvas由v-show控制,需等DOM更新可见后再取尺寸绘制波形,否则画布为0×0
15247
15296
  _this4.$nextTick(function () {
@@ -15253,6 +15302,8 @@ var TRAILING_SILENCE_MS = 5000;
15253
15302
  };
15254
15303
  mediaRecorder.onstop = function () {
15255
15304
  _this4.stopTimer();
15305
+ // 先断开PCM推送再关波形(stopWaveform会关闭AudioContext)
15306
+ _this4.stopPcmCapture();
15256
15307
  _this4.stopWaveform();
15257
15308
  _this4.releaseStream();
15258
15309
  _this4.mediaRecorder = null;
@@ -15260,13 +15311,22 @@ var TRAILING_SILENCE_MS = 5000;
15260
15311
  // 全程静音自动结束:丢弃录音,提示已在checkSilenceTimeout中给出
15261
15312
  _this4.discardRecording = false;
15262
15313
  _this4.audioChunks = [];
15314
+ _this4.closeStream();
15315
+ } else if (_this4.visible && _this4.streamActive && _this4.ws && _this4.ws.readyState === WebSocket.OPEN) {
15316
+ // 流式链路全程正常:通知服务端冲刷解码器收尾,不再整段上传
15317
+ _this4.finishStream();
15263
15318
  } else if (_this4.visible && _this4.audioChunks.length > 0) {
15264
- // 弹窗已关闭(取消录音)则不再上传
15319
+ // 弹窗已关闭(取消录音)则不再上传;流式失败时降级为整段上传
15320
+ _this4.closeStream();
15265
15321
  _this4.uploadVoice();
15266
15322
  }
15267
15323
  };
15268
15324
  _this4.mediaRecorder = mediaRecorder;
15269
15325
  mediaRecorder.start();
15326
+ // 流式识别:录音同时经 WebSocket 推送PCM,边说边出字;失败自动降级为整段上传
15327
+ if (_this4.streamPath) {
15328
+ _this4.startStream(stream);
15329
+ }
15270
15330
  }).catch(function () {
15271
15331
  _this4.showPermissionError();
15272
15332
  });
@@ -15304,6 +15364,179 @@ var TRAILING_SILENCE_MS = 5000;
15304
15364
  _this5.errorText = _this5.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15305
15365
  });
15306
15366
  },
15367
+ // 由axios的baseURL(/apigw)拼出流式识别WebSocket地址
15368
+ buildStreamWsUrl: function buildStreamWsUrl() {
15369
+ var base = this.$http && this.$http.defaults && this.$http.defaults.baseURL || '';
15370
+ if (!/^https?:/i.test(base)) {
15371
+ base = location.origin + (base && base.charAt(0) !== '/' ? '/' : '') + base;
15372
+ }
15373
+ return base.replace(/^https:/, 'wss:').replace(/^http:/, 'ws:') + this.streamPath;
15374
+ },
15375
+ // 建立流式识别WebSocket,成功后边录边传PCM;任何失败都静默回落到整段上传
15376
+ startStream: function startStream(stream) {
15377
+ var _this6 = this;
15378
+ var wsUrl = this.buildStreamWsUrl();
15379
+ console.log('[VoiceStream] 连接:', wsUrl);
15380
+ var ws;
15381
+ try {
15382
+ ws = new WebSocket(wsUrl);
15383
+ } catch (e) {
15384
+ console.warn('[VoiceStream] 创建WebSocket失败,降级为整段上传:', e);
15385
+ return;
15386
+ }
15387
+ ws.binaryType = 'arraybuffer';
15388
+ this.ws = ws;
15389
+ ws.onopen = function () {
15390
+ if (_this6.ws !== ws) return;
15391
+ if (_this6.status !== 'recording') {
15392
+ try {
15393
+ ws.close();
15394
+ } catch (e) {
15395
+ // 已关闭时close抛错可忽略
15396
+ }
15397
+ return;
15398
+ }
15399
+ console.log('[VoiceStream] 握手成功,开始推送PCM');
15400
+ _this6.streamActive = true;
15401
+ _this6.startPcmCapture(stream);
15402
+ };
15403
+ ws.onmessage = function (event) {
15404
+ return _this6.onStreamMessage(event);
15405
+ };
15406
+ ws.onerror = function (event) {
15407
+ console.warn('[VoiceStream] 连接错误,将降级为整段上传', event);
15408
+ };
15409
+ ws.onclose = function (event) {
15410
+ console.log('[VoiceStream] 连接关闭 code=' + event.code + (event.reason ? ' reason=' + event.reason : ''));
15411
+ if (_this6.ws !== ws) return;
15412
+ _this6.ws = null;
15413
+ if (_this6.streamWaitingDone) {
15414
+ // 等待最终结果期间服务端关闭,视为收尾完成
15415
+ _this6.onStreamDone();
15416
+ } else if (_this6.status === 'recording') {
15417
+ // 录音途中异常断开,标记降级,onstop时走整段上传
15418
+ _this6.streamActive = false;
15419
+ _this6.stopPcmCapture();
15420
+ }
15421
+ };
15422
+ },
15423
+ onStreamMessage: function onStreamMessage(event) {
15424
+ var msg;
15425
+ try {
15426
+ msg = JSON.parse(event.data);
15427
+ } catch (e) {
15428
+ return;
15429
+ }
15430
+ if (msg.error) {
15431
+ // 服务端明确报错(如流式未启用),降级到整段上传
15432
+ console.warn('[VoiceStream] 服务端报错,降级为整段上传:', msg.error);
15433
+ this.streamActive = false;
15434
+ this.stopPcmCapture();
15435
+ return;
15436
+ }
15437
+ if (msg.isFinal) {
15438
+ // 一段话说完(端点检测分段),固化进finalText
15439
+ if (msg.text) {
15440
+ this.finalText += msg.text;
15441
+ }
15442
+ this.resultText = this.finalText;
15443
+ } else {
15444
+ this.resultText = this.finalText + (msg.text || '');
15445
+ }
15446
+ if (msg.done) {
15447
+ this.onStreamDone();
15448
+ }
15449
+ },
15450
+ // 用ScriptProcessorNode抓PCM实时发送(AudioWorklet在旧WebView兼容性差)
15451
+ startPcmCapture: function startPcmCapture(stream) {
15452
+ var _this7 = this;
15453
+ var audioContext = this.audioContext;
15454
+ if (!audioContext || audioContext.state === 'closed') return;
15455
+ var source = audioContext.createMediaStreamSource(stream);
15456
+ var processor = audioContext.createScriptProcessor(4096, 1, 1);
15457
+ processor.onaudioprocess = function (event) {
15458
+ if (!_this7.streamActive || !_this7.ws || _this7.ws.readyState !== WebSocket.OPEN) return;
15459
+ var input = event.inputBuffer.getChannelData(0);
15460
+ _this7.ws.send(_this7.downsampleToInt16(input, event.inputBuffer.sampleRate));
15461
+ };
15462
+ source.connect(processor);
15463
+ // 必须接入输出图才会触发onaudioprocess,无output通道不会回放
15464
+ processor.connect(audioContext.destination);
15465
+ this.wsSource = source;
15466
+ this.wsProcessor = processor;
15467
+ },
15468
+ // 线性插值降采样到16kHz并转Int16小端,兼容44.1k/48k采集
15469
+ downsampleToInt16: function downsampleToInt16(input, sourceRate) {
15470
+ var ratio = sourceRate / 16000;
15471
+ var length = Math.floor(input.length / ratio);
15472
+ var result = new Int16Array(length);
15473
+ for (var i = 0; i < length; i++) {
15474
+ var pos = i * ratio;
15475
+ var left = Math.floor(pos);
15476
+ var right = Math.min(left + 1, input.length - 1);
15477
+ var sample = input[left] + (input[right] - input[left]) * (pos - left);
15478
+ var clamped = Math.max(-1, Math.min(1, sample));
15479
+ result[i] = clamped < 0 ? clamped * 0x8000 : clamped * 0x7fff;
15480
+ }
15481
+ return result.buffer;
15482
+ },
15483
+ stopPcmCapture: function stopPcmCapture() {
15484
+ if (this.wsProcessor) {
15485
+ this.wsProcessor.disconnect();
15486
+ this.wsProcessor.onaudioprocess = null;
15487
+ this.wsProcessor = null;
15488
+ }
15489
+ if (this.wsSource) {
15490
+ this.wsSource.disconnect();
15491
+ this.wsSource = null;
15492
+ }
15493
+ },
15494
+ // 录音结束:通知服务端冲刷解码器,等最终结果(超时兜底直接用现有文字)
15495
+ finishStream: function finishStream() {
15496
+ var _this8 = this;
15497
+ this.status = 'processing';
15498
+ this.streamWaitingDone = true;
15499
+ this.streamDoneTimer = setTimeout(function () {
15500
+ return _this8.onStreamDone();
15501
+ }, 4000);
15502
+ try {
15503
+ this.ws.send('stop');
15504
+ } catch (e) {
15505
+ this.onStreamDone();
15506
+ }
15507
+ },
15508
+ // 流式收尾(幂等):resultText已含最新partial,超时兜底也不丢字
15509
+ onStreamDone: function onStreamDone() {
15510
+ if (!this.streamWaitingDone) return;
15511
+ this.streamWaitingDone = false;
15512
+ this.closeStream();
15513
+ this.audioChunks = [];
15514
+ if (this.resultText.trim() !== '') {
15515
+ this.status = 'done';
15516
+ } else {
15517
+ this.status = 'error';
15518
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNoSpeech', '未检测到语音,请重试。');
15519
+ }
15520
+ },
15521
+ closeStream: function closeStream() {
15522
+ this.stopPcmCapture();
15523
+ if (this.streamDoneTimer) {
15524
+ clearTimeout(this.streamDoneTimer);
15525
+ this.streamDoneTimer = null;
15526
+ }
15527
+ if (this.ws) {
15528
+ var ws = this.ws;
15529
+ this.ws = null;
15530
+ ws.onclose = null;
15531
+ try {
15532
+ ws.close();
15533
+ } catch (e) {
15534
+ // 已关闭时close抛错可忽略
15535
+ }
15536
+ }
15537
+ this.streamActive = false;
15538
+ this.streamWaitingDone = false;
15539
+ },
15307
15540
  releaseStream: function releaseStream() {
15308
15541
  if (this.stream) {
15309
15542
  this.stream.getTracks().forEach(function (track) {
@@ -15314,25 +15547,25 @@ var TRAILING_SILENCE_MS = 5000;
15314
15547
  },
15315
15548
  // 浏览器模式下SpeechRecognition不暴露音频流,单独取一路流用于波形绘制
15316
15549
  startVisualStream: function startVisualStream() {
15317
- var _this6 = this;
15550
+ var _this9 = this;
15318
15551
  if (!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) return;
15319
15552
  navigator.mediaDevices.getUserMedia({
15320
15553
  audio: true
15321
15554
  }).then(function (stream) {
15322
15555
  // 取流回来时录音可能已结束
15323
- if (_this6.status !== 'recording') {
15556
+ if (_this9.status !== 'recording') {
15324
15557
  stream.getTracks().forEach(function (track) {
15325
15558
  return track.stop();
15326
15559
  });
15327
15560
  return;
15328
15561
  }
15329
- _this6.visualStream = stream;
15330
- _this6.startWaveform(stream);
15562
+ _this9.visualStream = stream;
15563
+ _this9.startWaveform(stream);
15331
15564
  }).catch(function () {});
15332
15565
  },
15333
15566
  // 用AnalyserNode实时绘制录音波形柱状图,复用startRecord手势内创建的AudioContext
15334
15567
  startWaveform: function startWaveform(stream) {
15335
- var _this7 = this;
15568
+ var _this10 = this;
15336
15569
  var canvas = this.$refs.waveCanvas;
15337
15570
  var audioContext = this.audioContext;
15338
15571
  if (!audioContext || audioContext.state === 'closed' || !canvas) return;
@@ -15356,20 +15589,28 @@ var TRAILING_SILENCE_MS = 5000;
15356
15589
  var barWidth = (canvas.width - gap * (barCount - 1)) / barCount;
15357
15590
  var centerY = canvas.height / 2;
15358
15591
  var draw = function draw() {
15359
- if (!_this7.analyser) return;
15360
- _this7.waveRafId = requestAnimationFrame(draw);
15361
- _this7.analyser.getByteFrequencyData(dataArray);
15592
+ if (!_this10.analyser) return;
15593
+ _this10.waveRafId = requestAnimationFrame(draw);
15594
+ _this10.analyser.getByteFrequencyData(dataArray);
15362
15595
  // 顺带做人声检测,供静音自动结束判定
15363
15596
  var sum = 0;
15364
15597
  for (var i = 0; i < dataArray.length; i++) {
15365
15598
  sum += dataArray[i];
15366
15599
  }
15367
15600
  if (sum / dataArray.length > VOICE_AVG_THRESHOLD) {
15368
- _this7.lastVoiceAt = Date.now();
15369
- _this7.hasVoice = true;
15601
+ _this10.lastVoiceAt = Date.now();
15602
+ _this10.hasVoice = true;
15370
15603
  }
15371
15604
  ctx.clearRect(0, 0, canvas.width, canvas.height);
15372
- ctx.fillStyle = '#1989fa';
15605
+ // 波形颜色随皮肤切换:科技版霓虹青带辉光,基本版保持品牌蓝
15606
+ if (_this10.currentSkin === 'tech') {
15607
+ ctx.fillStyle = '#00e5ff';
15608
+ ctx.shadowColor = 'rgba(0, 229, 255, 0.8)';
15609
+ ctx.shadowBlur = 8 * dpr;
15610
+ } else {
15611
+ ctx.fillStyle = '#1989fa';
15612
+ ctx.shadowBlur = 0;
15613
+ }
15373
15614
  for (var _i = 0; _i < barCount; _i++) {
15374
15615
  var value = dataArray[Math.floor(_i * dataArray.length / barCount)] / 255;
15375
15616
  var barHeight = Math.max(2 * dpr, value * canvas.height);
@@ -15399,6 +15640,7 @@ var TRAILING_SILENCE_MS = 5000;
15399
15640
  // 关闭/取消时释放麦克风等资源
15400
15641
  releaseResources: function releaseResources() {
15401
15642
  this.stopTimer();
15643
+ this.closeStream();
15402
15644
  this.stopWaveform();
15403
15645
  if (this.recognition) {
15404
15646
  this.recognition.abort();
@@ -15423,9 +15665,9 @@ var TRAILING_SILENCE_MS = 5000;
15423
15665
  });
15424
15666
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=script&lang=js
15425
15667
  /* harmony default export */ var src_VoiceInputDialogvue_type_script_lang_js = (VoiceInputDialogvue_type_script_lang_js);
15426
- // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[4]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=style&index=0&id=5924c680&prod&scoped=true&lang=scss
15427
- var VoiceInputDialogvue_type_style_index_0_id_5924c680_prod_scoped_true_lang_scss = __webpack_require__(2883);
15428
- ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=style&index=0&id=5924c680&prod&scoped=true&lang=scss
15668
+ // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[4]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=style&index=0&id=cf18a87c&prod&scoped=true&lang=scss
15669
+ var VoiceInputDialogvue_type_style_index_0_id_cf18a87c_prod_scoped_true_lang_scss = __webpack_require__(4949);
15670
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=style&index=0&id=cf18a87c&prod&scoped=true&lang=scss
15429
15671
 
15430
15672
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue
15431
15673
 
@@ -15438,11 +15680,11 @@ var VoiceInputDialogvue_type_style_index_0_id_5924c680_prod_scoped_true_lang_scs
15438
15680
 
15439
15681
  var VoiceInputDialog_component = (0,componentNormalizer/* default */.A)(
15440
15682
  src_VoiceInputDialogvue_type_script_lang_js,
15441
- VoiceInputDialogvue_type_template_id_5924c680_scoped_true_render,
15442
- VoiceInputDialogvue_type_template_id_5924c680_scoped_true_staticRenderFns,
15683
+ VoiceInputDialogvue_type_template_id_cf18a87c_scoped_true_render,
15684
+ VoiceInputDialogvue_type_template_id_cf18a87c_scoped_true_staticRenderFns,
15443
15685
  false,
15444
15686
  null,
15445
- "5924c680",
15687
+ "cf18a87c",
15446
15688
  null
15447
15689
 
15448
15690
  )
@@ -16470,9 +16712,9 @@ var moment = __webpack_require__(5093);
16470
16712
  });
16471
16713
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=script&lang=js
16472
16714
  /* harmony default export */ var src_SubmitHandlevue_type_script_lang_js = (SubmitHandlevue_type_script_lang_js);
16473
- // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[4]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=style&index=0&id=20bc806c&prod&scoped=true&lang=scss
16474
- var SubmitHandlevue_type_style_index_0_id_20bc806c_prod_scoped_true_lang_scss = __webpack_require__(1300);
16475
- ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=style&index=0&id=20bc806c&prod&scoped=true&lang=scss
16715
+ // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[4]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=style&index=0&id=6bdfbd40&prod&scoped=true&lang=scss
16716
+ var SubmitHandlevue_type_style_index_0_id_6bdfbd40_prod_scoped_true_lang_scss = __webpack_require__(5294);
16717
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=style&index=0&id=6bdfbd40&prod&scoped=true&lang=scss
16476
16718
 
16477
16719
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue
16478
16720
 
@@ -16485,11 +16727,11 @@ var SubmitHandlevue_type_style_index_0_id_20bc806c_prod_scoped_true_lang_scss =
16485
16727
 
16486
16728
  var SubmitHandle_component = (0,componentNormalizer/* default */.A)(
16487
16729
  src_SubmitHandlevue_type_script_lang_js,
16488
- SubmitHandlevue_type_template_id_20bc806c_scoped_true_render,
16489
- SubmitHandlevue_type_template_id_20bc806c_scoped_true_staticRenderFns,
16730
+ SubmitHandlevue_type_template_id_6bdfbd40_scoped_true_render,
16731
+ SubmitHandlevue_type_template_id_6bdfbd40_scoped_true_staticRenderFns,
16490
16732
  false,
16491
16733
  null,
16492
- "20bc806c",
16734
+ "6bdfbd40",
16493
16735
  null
16494
16736
 
16495
16737
  )
@@ -19144,6 +19386,7 @@ var ShortcutProcessing_component = (0,componentNormalizer/* default */.A)(
19144
19386
 
19145
19387
 
19146
19388
 
19389
+
19147
19390
  // 为组件添加 install 方法,用于按需引入
19148
19391
  Attachment.install = function (Vue) {
19149
19392
  Vue.component(Attachment.name, Attachment);
@@ -19172,6 +19415,9 @@ WriteToReadIdea.install = function (Vue) {
19172
19415
  ShortcutProcessing.install = function (Vue) {
19173
19416
  Vue.component(ShortcutProcessing.name, ShortcutProcessing);
19174
19417
  };
19418
+ VoiceInputDialog.install = function (Vue) {
19419
+ Vue.component(VoiceInputDialog.name, VoiceInputDialog);
19420
+ };
19175
19421
  var Wflowform_Attachment = Attachment;
19176
19422
  var Wflowform_BodyFile = BodyFile;
19177
19423
  var Wflowform_HandleIdea = HandleIdea;
@@ -19181,6 +19427,7 @@ var Wflowform_SubmitDialog = SubmitDialog;
19181
19427
  var Wflowform_WfNodelogList = WfNodelogList;
19182
19428
  var Wflowform_WriteToReadIdea = WriteToReadIdea;
19183
19429
  var Wflowform_ShortcutProcessing = ShortcutProcessing;
19430
+ var Wflowform_VoiceInputDialog = VoiceInputDialog;
19184
19431
 
19185
19432
  /***/ }),
19186
19433
 
@@ -22293,7 +22540,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".van-switch-field[data-v-61ed46da]{pos
22293
22540
 
22294
22541
  /***/ }),
22295
22542
 
22296
- /***/ 2171:
22543
+ /***/ 5441:
22297
22544
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
22298
22545
 
22299
22546
  "use strict";
@@ -22307,7 +22554,7 @@ __webpack_require__.r(__webpack_exports__);
22307
22554
 
22308
22555
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
22309
22556
  // Module
22310
- ___CSS_LOADER_EXPORT___.push([module.id, ".van-textarea-field[data-v-7743d246]{position:relative}.van-textarea-field[data-v-7743d246] .van-field__label{width:90%!important}.van-textarea-field[data-v-7743d246]:after{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;content:\" \";pointer-events:none;right:0;bottom:0;left:16px;border-bottom:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.richtext-content[data-v-7743d246]{width:100%;white-space:pre-wrap}.richtext-content[data-v-7743d246] img{-o-object-fit:contain;object-fit:contain;max-width:100%!important;height:auto!important}.richtext-content-hidden[data-v-7743d246]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.van-textarea-field[data-v-7743d246] .field-flSubject .richtext-content,.van-textarea-field[data-v-7743d246] .field-flSubject textarea.van-field__control{font-size:16px;font-weight:700}", ""]);
22557
+ ___CSS_LOADER_EXPORT___.push([module.id, ".van-textarea-field[data-v-27eb631a]{position:relative}.van-textarea-field[data-v-27eb631a] .van-field__label{width:90%!important}.van-textarea-field[data-v-27eb631a]:after{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;content:\" \";pointer-events:none;right:0;bottom:0;left:16px;border-bottom:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.richtext-content[data-v-27eb631a]{width:100%;white-space:pre-wrap}.richtext-content[data-v-27eb631a] img{-o-object-fit:contain;object-fit:contain;max-width:100%!important;height:auto!important}.richtext-content-hidden[data-v-27eb631a]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.voice-input-entry[data-v-27eb631a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:6px 16px 10px;color:#1989fa;font-size:14px}.voice-input-entry .voice-input-entry-icon[data-v-27eb631a]{width:16px;height:16px;margin-right:4px}.voice-input-entry[data-v-27eb631a]:active{opacity:.7}.van-textarea-field[data-v-27eb631a] .field-flSubject .richtext-content,.van-textarea-field[data-v-27eb631a] .field-flSubject textarea.van-field__control{font-size:16px;font-weight:700}", ""]);
22311
22558
  // Exports
22312
22559
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
22313
22560
 
@@ -22929,7 +23176,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".submit-dialog-container[data-v-9c230b
22929
23176
 
22930
23177
  /***/ }),
22931
23178
 
22932
- /***/ 106:
23179
+ /***/ 8632:
22933
23180
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
22934
23181
 
22935
23182
  "use strict";
@@ -22948,14 +23195,14 @@ var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require
22948
23195
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
22949
23196
  var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);
22950
23197
  // Module
22951
- ___CSS_LOADER_EXPORT___.push([module.id, ".submit-handle-container .idea-button-container .van-cell__value[data-v-20bc806c]{text-align:right}.submit-handle-container .idea-button-container .van-cell__value .van-button[data-v-20bc806c]{margin-right:0;margin-left:5px}.submit-handle-container .curIdea-filed[data-v-20bc806c] .van-cell__title,.submit-handle-container .curIdea-filed[data-v-20bc806c]:after{display:none}.submit-handle-container .idea-input-wrap[data-v-20bc806c]{position:relative}.submit-handle-container .idea-input-wrap[data-v-20bc806c] .curIdea-filed textarea{padding-right:30px}.submit-handle-container .idea-input-wrap .voice-input-btn[data-v-20bc806c]{position:absolute;right:12px;bottom:8px;z-index:2;width:28px;height:28px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;background-color:#f2f3f5;color:#646566}.submit-handle-container .idea-input-wrap .voice-input-btn .voice-input-icon[data-v-20bc806c]{width:16px;height:16px}.submit-handle-container .idea-input-wrap .voice-input-btn[data-v-20bc806c]:active{background-color:#ebedf0;color:#1989fa}.submit-handle-container .clearfix[data-v-20bc806c]:after{content:\".\";display:block;height:0;clear:both;visibility:hidden}.submit-handle-container[data-v-20bc806c] .van-radio-group .van-cell__title{font-weight:400!important}.submit-handle-container .van-wflow-operate-detail-cell[data-v-20bc806c]:after{border-top-width:0}.submit-handle-container .van-wflow-operate-detail-cell-path[data-v-20bc806c]:after{border-width:1px;-webkit-transform:scale(.5);transform:scale(.5)}.submit-handle-container[data-v-20bc806c] .tnLimit-container .van-field{width:50px;display:inline-block;padding:0}.submit-handle-container[data-v-20bc806c] .tnLimit-container .van-field .van-field__body input{text-align:center}.submit-handle-container[data-v-20bc806c] .tnLimit-container .van-field__body:after{color:#323233;content:attr(value-suffix);word-break:keep-all}.submit-handle-container .delete-icon[data-v-20bc806c]{display:-webkit-box;display:-ms-flexbox;display:flex;float:right}.submit-handle-container .delete-icon .van-icon[data-v-20bc806c]{line-height:24px;margin-left:5px;font-size:16px}.selectBox_title[data-v-20bc806c]{height:45px;line-height:45px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:14px}.selectBox_content[data-v-20bc806c],.selectBox_title[data-v-20bc806c]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 15px}.selectBox_content[data-v-20bc806c]{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap}.selectBox_content .selectBox_content_son[data-v-20bc806c]{border:1px solid #f1f1f1}.selectBox_content .selectBox_content_son[data-v-20bc806c],.selectBox_content .selectBox_content_son_change[data-v-20bc806c]{padding:4px;background:#f8fafb;font-size:14px;margin-bottom:10px!important;text-align:center;height:22px;line-height:22px;width:calc(25% - 17.5px);margin-right:10px}.selectBox_content .selectBox_content_son_change[data-v-20bc806c]{border:1px solid #3f88f1;background-image:url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ");background-repeat:no-repeat;background-size:15px 15px;background-position:100% 100%;color:#3f88f1}.selectBox_content_sonall[data-v-20bc806c]{white-space:nowrap;overflow:hidden;overflow-x:scroll;-webkit-overflow-scrolling:touch}.selectBox_content_sonall[data-v-20bc806c]:nth-child(4n){margin-right:0}.selectBox_content_sonall[data-v-20bc806c]::-webkit-scrollbar{display:none}.viewAllComments[data-v-20bc806c]{height:45px;line-height:45px;text-align:center;color:#b7b7b7;font-size:12px;background:#fff;display:block;width:100%}", ""]);
23198
+ ___CSS_LOADER_EXPORT___.push([module.id, ".submit-handle-container .idea-button-container .van-cell__value[data-v-6bdfbd40]{text-align:right}.submit-handle-container .idea-button-container .van-cell__value .van-button[data-v-6bdfbd40]{margin-right:0;margin-left:5px}.submit-handle-container .curIdea-filed[data-v-6bdfbd40] .van-cell__title,.submit-handle-container .curIdea-filed[data-v-6bdfbd40]:after{display:none}.submit-handle-container .idea-input-wrap[data-v-6bdfbd40]{position:relative}.submit-handle-container .idea-input-wrap[data-v-6bdfbd40] .curIdea-filed textarea{padding-right:30px}.submit-handle-container .idea-input-wrap .voice-input-btn[data-v-6bdfbd40]{position:absolute;right:12px;bottom:8px;z-index:2;width:28px;height:28px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;background-color:#f2f3f5;color:#646566}.submit-handle-container .idea-input-wrap .voice-input-btn .voice-input-icon[data-v-6bdfbd40]{width:16px;height:16px}.submit-handle-container .idea-input-wrap .voice-input-btn[data-v-6bdfbd40]:active{background-color:#ebedf0;color:#1989fa}.submit-handle-container .clearfix[data-v-6bdfbd40]:after{content:\".\";display:block;height:0;clear:both;visibility:hidden}.submit-handle-container[data-v-6bdfbd40] .van-radio-group .van-cell__title{font-weight:400!important}.submit-handle-container .van-wflow-operate-detail-cell[data-v-6bdfbd40]:after{border-top-width:0}.submit-handle-container .van-wflow-operate-detail-cell-path[data-v-6bdfbd40]:after{border-width:1px;-webkit-transform:scale(.5);transform:scale(.5)}.submit-handle-container[data-v-6bdfbd40] .tnLimit-container .van-field{width:50px;display:inline-block;padding:0}.submit-handle-container[data-v-6bdfbd40] .tnLimit-container .van-field .van-field__body input{text-align:center}.submit-handle-container[data-v-6bdfbd40] .tnLimit-container .van-field__body:after{color:#323233;content:attr(value-suffix);word-break:keep-all}.submit-handle-container .delete-icon[data-v-6bdfbd40]{display:-webkit-box;display:-ms-flexbox;display:flex;float:right}.submit-handle-container .delete-icon .van-icon[data-v-6bdfbd40]{line-height:24px;margin-left:5px;font-size:16px}.selectBox_title[data-v-6bdfbd40]{height:45px;line-height:45px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:14px}.selectBox_content[data-v-6bdfbd40],.selectBox_title[data-v-6bdfbd40]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 15px}.selectBox_content[data-v-6bdfbd40]{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap}.selectBox_content .selectBox_content_son[data-v-6bdfbd40]{border:1px solid #f1f1f1}.selectBox_content .selectBox_content_son[data-v-6bdfbd40],.selectBox_content .selectBox_content_son_change[data-v-6bdfbd40]{padding:4px;background:#f8fafb;font-size:14px;margin-bottom:10px!important;text-align:center;height:22px;line-height:22px;width:calc(25% - 17.5px);margin-right:10px}.selectBox_content .selectBox_content_son_change[data-v-6bdfbd40]{border:1px solid #3f88f1;background-image:url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ");background-repeat:no-repeat;background-size:15px 15px;background-position:100% 100%;color:#3f88f1}.selectBox_content_sonall[data-v-6bdfbd40]{white-space:nowrap;overflow:hidden;overflow-x:scroll;-webkit-overflow-scrolling:touch}.selectBox_content_sonall[data-v-6bdfbd40]:nth-child(4n){margin-right:0}.selectBox_content_sonall[data-v-6bdfbd40]::-webkit-scrollbar{display:none}.viewAllComments[data-v-6bdfbd40]{height:45px;line-height:45px;text-align:center;color:#b7b7b7;font-size:12px;background:#fff;display:block;width:100%}", ""]);
22952
23199
  // Exports
22953
23200
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
22954
23201
 
22955
23202
 
22956
23203
  /***/ }),
22957
23204
 
22958
- /***/ 2053:
23205
+ /***/ 5019:
22959
23206
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
22960
23207
 
22961
23208
  "use strict";
@@ -22969,7 +23216,7 @@ __webpack_require__.r(__webpack_exports__);
22969
23216
 
22970
23217
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
22971
23218
  // Module
22972
- ___CSS_LOADER_EXPORT___.push([module.id, ".voice-input-popup[data-v-5924c680]{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.voice-input-popup .voice-popup-header[data-v-5924c680]{position:relative;height:48px;line-height:48px;text-align:center}.voice-input-popup .voice-popup-header .voice-popup-title[data-v-5924c680]{font-size:16px;font-weight:600;color:#323233}.voice-input-popup .voice-popup-header .voice-popup-close[data-v-5924c680]{position:absolute;right:16px;top:16px;font-size:16px;color:#c8c9cc}.voice-input-popup .voice-popup-body[data-v-5924c680]{padding:8px 16px 0;text-align:center}.voice-input-popup .voice-popup-body .voice-mic-btn[data-v-5924c680]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:64px;height:64px;border-radius:50%;background-color:#1989fa;color:#fff}.voice-input-popup .voice-popup-body .voice-mic-btn .voice-mic-icon[data-v-5924c680]{width:28px;height:28px}.voice-input-popup .voice-popup-body .voice-mic-btn.recording[data-v-5924c680]{background-color:#ee0a24;-webkit-animation:voice-breathe-5924c680 1.5s ease-out infinite;animation:voice-breathe-5924c680 1.5s ease-out infinite}.voice-input-popup .voice-popup-body .voice-mic-btn[data-v-5924c680] .van-loading{padding-top:0}.voice-input-popup .voice-popup-body .voice-status-text[data-v-5924c680]{margin-top:12px;font-size:13px;color:#646566}.voice-input-popup .voice-popup-body .voice-status-text.is-error[data-v-5924c680]{color:#ee0a24}.voice-input-popup .voice-popup-body .voice-wave-canvas[data-v-5924c680]{display:block;width:200px;height:32px;margin:8px auto 0}.voice-input-popup .voice-popup-body .voice-timer[data-v-5924c680]{margin-top:4px;font-size:13px;color:#969799}.voice-input-popup .voice-popup-body .voice-result-field[data-v-5924c680]{margin-top:12px;background-color:#f7f8fa;border-radius:8px}.voice-input-popup .voice-popup-footer[data-v-5924c680]{padding:12px 16px;text-align:right}.voice-input-popup .voice-popup-footer .van-button[data-v-5924c680]{margin-left:8px;min-width:80px}@-webkit-keyframes voice-breathe-5924c680{0%{-webkit-box-shadow:0 0 0 0 rgba(238,10,36,.5);box-shadow:0 0 0 0 rgba(238,10,36,.5)}to{-webkit-box-shadow:0 0 0 16px rgba(238,10,36,0);box-shadow:0 0 0 16px rgba(238,10,36,0)}}@keyframes voice-breathe-5924c680{0%{-webkit-box-shadow:0 0 0 0 rgba(238,10,36,.5);box-shadow:0 0 0 0 rgba(238,10,36,.5)}to{-webkit-box-shadow:0 0 0 16px rgba(238,10,36,0);box-shadow:0 0 0 16px rgba(238,10,36,0)}}", ""]);
23219
+ ___CSS_LOADER_EXPORT___.push([module.id, ".voice-input-popup[data-v-cf18a87c]{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.voice-input-popup .voice-popup-header[data-v-cf18a87c]{position:relative;height:48px;line-height:48px;text-align:center}.voice-input-popup .voice-popup-header .voice-popup-title[data-v-cf18a87c]{font-size:16px;font-weight:600;color:#323233}.voice-input-popup .voice-popup-header .voice-popup-close[data-v-cf18a87c]{position:absolute;right:16px;top:16px;font-size:16px;color:#c8c9cc}.voice-input-popup .voice-popup-body[data-v-cf18a87c]{padding:8px 16px 0;text-align:center}.voice-input-popup .voice-popup-body .voice-mic-btn[data-v-cf18a87c]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:64px;height:64px;border-radius:50%;background-color:#1989fa;color:#fff}.voice-input-popup .voice-popup-body .voice-mic-btn .voice-mic-icon[data-v-cf18a87c]{width:28px;height:28px}.voice-input-popup .voice-popup-body .voice-mic-btn.recording[data-v-cf18a87c]{background-color:#ee0a24;-webkit-animation:voice-breathe-cf18a87c 1.5s ease-out infinite;animation:voice-breathe-cf18a87c 1.5s ease-out infinite}.voice-input-popup .voice-popup-body .voice-mic-btn[data-v-cf18a87c] .van-loading{padding-top:0}.voice-input-popup .voice-popup-body .voice-status-text[data-v-cf18a87c]{margin-top:12px;font-size:13px;color:#646566}.voice-input-popup .voice-popup-body .voice-status-text.is-error[data-v-cf18a87c]{color:#ee0a24}.voice-input-popup .voice-popup-body .voice-wave-canvas[data-v-cf18a87c]{display:block;width:200px;height:32px;margin:8px auto 0}.voice-input-popup .voice-popup-body .voice-timer[data-v-cf18a87c]{margin-top:4px;font-size:13px;color:#969799}.voice-input-popup .voice-popup-body .voice-result-field[data-v-cf18a87c]{margin-top:12px;background-color:#f7f8fa;border-radius:8px}.voice-input-popup .voice-popup-footer[data-v-cf18a87c]{padding:12px 16px;text-align:right}.voice-input-popup .voice-popup-footer .van-button[data-v-cf18a87c]{margin-left:8px;min-width:80px}.voice-mic-wrap[data-v-cf18a87c]{position:relative;display:inline-block;width:64px;height:64px}.voice-mic-wrap .tech-ripple[data-v-cf18a87c]{position:absolute;left:50%;top:50%;width:64px;height:64px;margin:-32px 0 0 -32px;border-radius:50%;border:1px solid rgba(0,229,255,.6);opacity:0;pointer-events:none}.voice-input-popup.skin-tech[data-v-cf18a87c]{background-image:linear-gradient(rgba(0,229,255,.045) 1px,transparent 0),linear-gradient(90deg,rgba(0,229,255,.045) 1px,transparent 0),radial-gradient(circle at 18% 0,rgba(0,229,255,.12),transparent 42%),radial-gradient(circle at 85% 100%,rgba(0,110,255,.12),transparent 45%),linear-gradient(160deg,#060d21,#0a1a3f 55%,#071026);background-size:24px 24px,24px 24px,100% 100%,100% 100%,100% 100%}.voice-input-popup.skin-tech .voice-popup-header[data-v-cf18a87c]{border-bottom:1px solid rgba(0,229,255,.15)}.voice-input-popup.skin-tech .voice-popup-header .voice-popup-title[data-v-cf18a87c]{color:#d8f4ff;letter-spacing:3px;text-shadow:0 0 10px rgba(0,229,255,.75)}.voice-input-popup.skin-tech .voice-popup-header .voice-popup-close[data-v-cf18a87c]{color:rgba(0,229,255,.6)}.voice-input-popup.skin-tech .voice-popup-body .voice-mic-btn[data-v-cf18a87c]{background:radial-gradient(circle at 30% 25%,#1a4a8a,#0a2547 72%);border:1.5px solid rgba(0,229,255,.7);color:#00e5ff;-webkit-box-shadow:0 0 20px rgba(0,229,255,.4),inset 0 0 15px rgba(0,229,255,.15);box-shadow:0 0 20px rgba(0,229,255,.4),inset 0 0 15px rgba(0,229,255,.15)}.voice-input-popup.skin-tech .voice-popup-body .voice-mic-btn.recording[data-v-cf18a87c]{background:radial-gradient(circle at 30% 25%,#8a1a3f,#470a20 72%);border-color:rgba(255,45,105,.85);color:#ff5c8a;-webkit-animation:tech-breathe-cf18a87c 1.5s ease-out infinite;animation:tech-breathe-cf18a87c 1.5s ease-out infinite}.voice-input-popup.skin-tech .voice-popup-body .voice-status-text[data-v-cf18a87c]{color:#8fd8ff;text-shadow:0 0 6px rgba(0,229,255,.3)}.voice-input-popup.skin-tech .voice-popup-body .voice-status-text.is-error[data-v-cf18a87c]{color:#ff5c8a;text-shadow:0 0 6px rgba(255,45,105,.3)}.voice-input-popup.skin-tech .voice-popup-body .voice-timer[data-v-cf18a87c]{color:#00e5ff;font-family:Courier New,Courier,monospace;letter-spacing:2px;text-shadow:0 0 8px rgba(0,229,255,.7)}.voice-input-popup.skin-tech .voice-popup-body .voice-result-field[data-v-cf18a87c]{background:rgba(6,25,55,.6);border:1px solid rgba(0,229,255,.35);-webkit-box-shadow:inset 0 0 12px rgba(0,229,255,.1);box-shadow:inset 0 0 12px rgba(0,229,255,.1)}.voice-input-popup.skin-tech .voice-popup-body .voice-result-field[data-v-cf18a87c] .van-field__control{color:#d8f4ff;caret-color:#00e5ff}.voice-input-popup.skin-tech .voice-popup-body .voice-result-field[data-v-cf18a87c] .van-field__control::-webkit-input-placeholder{color:rgba(143,216,255,.4)}.voice-input-popup.skin-tech .voice-popup-body .voice-result-field[data-v-cf18a87c] .van-field__control::-moz-placeholder{color:rgba(143,216,255,.4)}.voice-input-popup.skin-tech .voice-popup-body .voice-result-field[data-v-cf18a87c] .van-field__control::-ms-input-placeholder{color:rgba(143,216,255,.4)}.voice-input-popup.skin-tech .voice-popup-body .voice-result-field[data-v-cf18a87c] .van-field__control::placeholder{color:rgba(143,216,255,.4)}.voice-input-popup.skin-tech .voice-popup-footer .van-button--default[data-v-cf18a87c]{background:transparent;color:#8fd8ff}.voice-input-popup.skin-tech .voice-popup-footer .van-button--default[data-v-cf18a87c]:after{border-color:rgba(0,229,255,.4)}.voice-input-popup.skin-tech .voice-popup-footer .van-button--info[data-v-cf18a87c]{background:-webkit-gradient(linear,left top,right top,from(#00b8d4),to(#00e5ff));background:linear-gradient(90deg,#00b8d4,#00e5ff);color:#04122b;-webkit-box-shadow:0 0 12px rgba(0,229,255,.45);box-shadow:0 0 12px rgba(0,229,255,.45)}.voice-input-popup.skin-tech .voice-popup-footer .van-button--info[data-v-cf18a87c]:after{border-width:0}.voice-input-popup.skin-tech .voice-popup-footer .van-button--info.van-button--disabled[data-v-cf18a87c]{opacity:.45}.voice-input-popup.skin-tech .voice-mic-wrap.recording .tech-ripple[data-v-cf18a87c]{border-color:rgba(255,45,105,.7);-webkit-animation:tech-ripple-cf18a87c 2s ease-out infinite;animation:tech-ripple-cf18a87c 2s ease-out infinite}.voice-input-popup.skin-tech .voice-mic-wrap.recording .tech-ripple-2[data-v-cf18a87c]{-webkit-animation-delay:.6s;animation-delay:.6s}.voice-input-popup.skin-tech .voice-mic-wrap.recording .tech-ripple-3[data-v-cf18a87c]{-webkit-animation-delay:1.2s;animation-delay:1.2s}@-webkit-keyframes tech-ripple-cf18a87c{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.7}to{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}@keyframes tech-ripple-cf18a87c{0%{-webkit-transform:scale(1);transform:scale(1);opacity:.7}to{-webkit-transform:scale(2.4);transform:scale(2.4);opacity:0}}@-webkit-keyframes tech-breathe-cf18a87c{0%{-webkit-box-shadow:0 0 24px rgba(255,45,105,.55),inset 0 0 15px rgba(255,45,105,.2),0 0 0 0 rgba(255,45,105,.45);box-shadow:0 0 24px rgba(255,45,105,.55),inset 0 0 15px rgba(255,45,105,.2),0 0 0 0 rgba(255,45,105,.45)}to{-webkit-box-shadow:0 0 24px rgba(255,45,105,.55),inset 0 0 15px rgba(255,45,105,.2),0 0 0 18px rgba(255,45,105,0);box-shadow:0 0 24px rgba(255,45,105,.55),inset 0 0 15px rgba(255,45,105,.2),0 0 0 18px rgba(255,45,105,0)}}@keyframes tech-breathe-cf18a87c{0%{-webkit-box-shadow:0 0 24px rgba(255,45,105,.55),inset 0 0 15px rgba(255,45,105,.2),0 0 0 0 rgba(255,45,105,.45);box-shadow:0 0 24px rgba(255,45,105,.55),inset 0 0 15px rgba(255,45,105,.2),0 0 0 0 rgba(255,45,105,.45)}to{-webkit-box-shadow:0 0 24px rgba(255,45,105,.55),inset 0 0 15px rgba(255,45,105,.2),0 0 0 18px rgba(255,45,105,0);box-shadow:0 0 24px rgba(255,45,105,.55),inset 0 0 15px rgba(255,45,105,.2),0 0 0 18px rgba(255,45,105,0)}}@-webkit-keyframes voice-breathe-cf18a87c{0%{-webkit-box-shadow:0 0 0 0 rgba(238,10,36,.5);box-shadow:0 0 0 0 rgba(238,10,36,.5)}to{-webkit-box-shadow:0 0 0 16px rgba(238,10,36,0);box-shadow:0 0 0 16px rgba(238,10,36,0)}}@keyframes voice-breathe-cf18a87c{0%{-webkit-box-shadow:0 0 0 0 rgba(238,10,36,.5);box-shadow:0 0 0 0 rgba(238,10,36,.5)}to{-webkit-box-shadow:0 0 0 16px rgba(238,10,36,0);box-shadow:0 0 0 16px rgba(238,10,36,0)}}", ""]);
22973
23220
  // Exports
22974
23221
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
22975
23222
 
@@ -23039,7 +23286,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".loading[data-v-69610664]{margin-top:1
23039
23286
 
23040
23287
  /***/ }),
23041
23288
 
23042
- /***/ 4602:
23289
+ /***/ 7687:
23043
23290
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
23044
23291
 
23045
23292
  "use strict";
@@ -23053,7 +23300,7 @@ __webpack_require__.r(__webpack_exports__);
23053
23300
 
23054
23301
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
23055
23302
  // Module
23056
- ___CSS_LOADER_EXPORT___.push([module.id, ".icon-dialog[data-v-76a1a43d] .el-dialog__body{height:650px;overflow-y:auto;padding:0 0 20px 0}.icon-dialog[data-v-76a1a43d] .el-dialog__body .el-tabs--top{margin-top:0}", ""]);
23303
+ ___CSS_LOADER_EXPORT___.push([module.id, ".icon-dialog[data-v-3ebd0a76] .el-dialog__body{height:650px;overflow-y:auto;padding:0 0 20px 0}.icon-dialog[data-v-3ebd0a76] .el-dialog__body .el-tabs--top{margin-top:0}", ""]);
23057
23304
  // Exports
23058
23305
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
23059
23306
 
@@ -50121,19 +50368,19 @@ var update = add("49a7cd0a", content, true, {"sourceMap":false,"shadowMode":fals
50121
50368
 
50122
50369
  /***/ }),
50123
50370
 
50124
- /***/ 1197:
50371
+ /***/ 8619:
50125
50372
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
50126
50373
 
50127
50374
  // style-loader: Adds some css to the DOM by adding a <style> tag
50128
50375
 
50129
50376
  // load the styles
50130
- var content = __webpack_require__(2171);
50377
+ var content = __webpack_require__(5441);
50131
50378
  if(content.__esModule) content = content.default;
50132
50379
  if(typeof content === 'string') content = [[module.id, content, '']];
50133
50380
  if(content.locals) module.exports = content.locals;
50134
50381
  // add the styles to the DOM
50135
50382
  var add = (__webpack_require__(9548)/* ["default"] */ .A)
50136
- var update = add("72cd3eb0", content, true, {"sourceMap":false,"shadowMode":false});
50383
+ var update = add("44739768", content, true, {"sourceMap":false,"shadowMode":false});
50137
50384
 
50138
50385
  /***/ }),
50139
50386
 
@@ -50601,35 +50848,35 @@ var update = add("780551c7", content, true, {"sourceMap":false,"shadowMode":fals
50601
50848
 
50602
50849
  /***/ }),
50603
50850
 
50604
- /***/ 1300:
50851
+ /***/ 5294:
50605
50852
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
50606
50853
 
50607
50854
  // style-loader: Adds some css to the DOM by adding a <style> tag
50608
50855
 
50609
50856
  // load the styles
50610
- var content = __webpack_require__(106);
50857
+ var content = __webpack_require__(8632);
50611
50858
  if(content.__esModule) content = content.default;
50612
50859
  if(typeof content === 'string') content = [[module.id, content, '']];
50613
50860
  if(content.locals) module.exports = content.locals;
50614
50861
  // add the styles to the DOM
50615
50862
  var add = (__webpack_require__(9548)/* ["default"] */ .A)
50616
- var update = add("57dd6872", content, true, {"sourceMap":false,"shadowMode":false});
50863
+ var update = add("6665940f", content, true, {"sourceMap":false,"shadowMode":false});
50617
50864
 
50618
50865
  /***/ }),
50619
50866
 
50620
- /***/ 2883:
50867
+ /***/ 4949:
50621
50868
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
50622
50869
 
50623
50870
  // style-loader: Adds some css to the DOM by adding a <style> tag
50624
50871
 
50625
50872
  // load the styles
50626
- var content = __webpack_require__(2053);
50873
+ var content = __webpack_require__(5019);
50627
50874
  if(content.__esModule) content = content.default;
50628
50875
  if(typeof content === 'string') content = [[module.id, content, '']];
50629
50876
  if(content.locals) module.exports = content.locals;
50630
50877
  // add the styles to the DOM
50631
50878
  var add = (__webpack_require__(9548)/* ["default"] */ .A)
50632
- var update = add("470e1098", content, true, {"sourceMap":false,"shadowMode":false});
50879
+ var update = add("6ddf8070", content, true, {"sourceMap":false,"shadowMode":false});
50633
50880
 
50634
50881
  /***/ }),
50635
50882
 
@@ -50681,19 +50928,19 @@ var update = add("e368663c", content, true, {"sourceMap":false,"shadowMode":fals
50681
50928
 
50682
50929
  /***/ }),
50683
50930
 
50684
- /***/ 1908:
50931
+ /***/ 3381:
50685
50932
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
50686
50933
 
50687
50934
  // style-loader: Adds some css to the DOM by adding a <style> tag
50688
50935
 
50689
50936
  // load the styles
50690
- var content = __webpack_require__(4602);
50937
+ var content = __webpack_require__(7687);
50691
50938
  if(content.__esModule) content = content.default;
50692
50939
  if(typeof content === 'string') content = [[module.id, content, '']];
50693
50940
  if(content.locals) module.exports = content.locals;
50694
50941
  // add the styles to the DOM
50695
50942
  var add = (__webpack_require__(9548)/* ["default"] */ .A)
50696
- var update = add("bfc5a162", content, true, {"sourceMap":false,"shadowMode":false});
50943
+ var update = add("b1008540", content, true, {"sourceMap":false,"shadowMode":false});
50697
50944
 
50698
50945
  /***/ }),
50699
50946
 
@@ -52262,7 +52509,7 @@ webpackContext.id = 2397;
52262
52509
 
52263
52510
  var map = {
52264
52511
  "./app.js": 3299,
52265
- "./route.js": 6914,
52512
+ "./route.js": 249,
52266
52513
  "./settings.js": 8183,
52267
52514
  "./tagsView.js": 314
52268
52515
  };
@@ -56566,7 +56813,7 @@ service.interceptors.response.use(function (response) {
56566
56813
  errmsg = error.response.data.message;
56567
56814
  }
56568
56815
  if (window.vType === 'wapp') {
56569
- var ignoreUrls = ['login', 'getUserRolePermissions', 'getUiStyleConfig', 'queryUiFontSize', 'homepage/allm'];
56816
+ var ignoreUrls = ['login', 'getUserRolePermissions', 'getUiStyleConfig', 'queryUiFontSize', 'homepage/allm', 'getLastMsgCount'];
56570
56817
  if (!ignoreUrls.some(function (u) {
56571
56818
  return error.config.url.toLowerCase().indexOf(u.toLocaleLowerCase()) !== -1;
56572
56819
  })) {
@@ -70922,8 +71169,8 @@ var SwitchField_component = (0,componentNormalizer/* default */.A)(
70922
71169
  )
70923
71170
 
70924
71171
  /* harmony default export */ var SwitchField = (SwitchField_component.exports);
70925
- ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./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!./packages/ecmapp/Basicform/src/FormField/TextareaField.vue?vue&type=template&id=7743d246&scoped=true
70926
- var TextareaFieldvue_type_template_id_7743d246_scoped_true_render = function render() {
71172
+ ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./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!./packages/ecmapp/Basicform/src/FormField/TextareaField.vue?vue&type=template&id=27eb631a&scoped=true
71173
+ var TextareaFieldvue_type_template_id_27eb631a_scoped_true_render = function render() {
70927
71174
  var _vm = this,
70928
71175
  _c = _vm._self._c;
70929
71176
  return _vm.isShowField ? _c('div', {
@@ -71016,9 +71263,42 @@ var TextareaFieldvue_type_template_id_7743d246_scoped_true_render = function ren
71016
71263
  return _vm.showTextContent(_vm.showType);
71017
71264
  }
71018
71265
  }
71019
- }, [_vm._v(_vm._s(_vm.textName))])]) : _vm._e()], 1) : _vm._e();
71266
+ }, [_vm._v(_vm._s(_vm.textName))])]) : _vm._e(), _vm.voiceInputEnabled ? _c('div', {
71267
+ staticClass: "voice-input-entry",
71268
+ on: {
71269
+ "click": function click($event) {
71270
+ $event.stopPropagation();
71271
+ return _vm.openVoiceDialog.apply(null, arguments);
71272
+ }
71273
+ }
71274
+ }, [_c('svg', {
71275
+ staticClass: "voice-input-entry-icon",
71276
+ attrs: {
71277
+ "viewBox": "0 0 1024 1024",
71278
+ "fill": "currentColor",
71279
+ "aria-hidden": "true"
71280
+ }
71281
+ }, [_c('path', {
71282
+ attrs: {
71283
+ "d": "M512 640c88.4 0 160-71.6 160-160V224c0-88.4-71.6-160-160-160S352 135.6 352 224v256c0 88.4 71.6 160 160 160z"
71284
+ }
71285
+ }), _c('path', {
71286
+ attrs: {
71287
+ "d": "M768 480c0 141.4-114.6 256-256 256S256 621.4 256 480h-64c0 163.9 123.3 299 288 318.4V896H352v64h320v-64H544v-97.6C708.7 779 832 643.9 832 480h-64z"
71288
+ }
71289
+ })]), _c('span', [_vm._v(_vm._s(_vm.$tx('ecmapp.wflowform.voiceInput', '语音输入')))])]) : _vm._e(), _c('VoiceInputDialog', {
71290
+ attrs: {
71291
+ "visible": _vm.voiceDialogVisible
71292
+ },
71293
+ on: {
71294
+ "update:visible": function updateVisible($event) {
71295
+ _vm.voiceDialogVisible = $event;
71296
+ },
71297
+ "confirm": _vm.onVoiceConfirm
71298
+ }
71299
+ })], 1) : _vm._e();
71020
71300
  };
71021
- var TextareaFieldvue_type_template_id_7743d246_scoped_true_staticRenderFns = [];
71301
+ var TextareaFieldvue_type_template_id_27eb631a_scoped_true_staticRenderFns = [];
71022
71302
 
71023
71303
  ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecmapp/Basicform/src/FormField/TextareaField.vue?vue&type=script&lang=js
71024
71304
  function TextareaFieldvue_type_script_lang_js_typeof(o) { "@babel/helpers - typeof"; return TextareaFieldvue_type_script_lang_js_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, TextareaFieldvue_type_script_lang_js_typeof(o); }
@@ -71083,6 +71363,10 @@ function TextareaFieldvue_type_script_lang_js_toPrimitive(t, r) { if ("object" !
71083
71363
  autosize: {
71084
71364
  type: Boolean,
71085
71365
  default: true
71366
+ },
71367
+ voiceInput: {
71368
+ type: Boolean,
71369
+ default: false
71086
71370
  }
71087
71371
  },
71088
71372
  data: function data() {
@@ -71095,10 +71379,15 @@ function TextareaFieldvue_type_script_lang_js_toPrimitive(t, r) { if ("object" !
71095
71379
  maxLength: null,
71096
71380
  updateField: false,
71097
71381
  inputValue: '',
71098
- nodeFieldReadOnly: false
71382
+ nodeFieldReadOnly: false,
71383
+ voiceDialogVisible: false
71099
71384
  };
71100
71385
  },
71101
71386
  computed: TextareaFieldvue_type_script_lang_js_objectSpread(TextareaFieldvue_type_script_lang_js_objectSpread({}, (0,vuex_esm/* mapGetters */.L8)(['loginUser'])), {}, {
71387
+ // 语音输入按钮显示条件:voice-input属性为true、字段可编辑且非元素级只读
71388
+ voiceInputEnabled: function voiceInputEnabled() {
71389
+ return this.voiceInput && !this.readonly && !this.nodeFieldReadOnly && this.elementReadonly !== 1;
71390
+ },
71102
71391
  optionGenerateUrl: function optionGenerateUrl() {
71103
71392
  var _this2 = this;
71104
71393
  var url = this.field.optionGenerateUrl;
@@ -71412,6 +71701,15 @@ function TextareaFieldvue_type_script_lang_js_toPrimitive(t, r) { if ("object" !
71412
71701
  _this6.updateField = false;
71413
71702
  });
71414
71703
  },
71704
+ // 打开语音输入弹窗
71705
+ openVoiceDialog: function openVoiceDialog() {
71706
+ this.voiceDialogVisible = true;
71707
+ },
71708
+ // 语音识别完成回调:识别文本追加到现有内容末尾,同步更新字段值
71709
+ onVoiceConfirm: function onVoiceConfirm(text) {
71710
+ this.inputValue = this.inputValue ? this.inputValue + text : text;
71711
+ this.setFieldValue(this.inputValue);
71712
+ },
71415
71713
  getFieldValue: function getFieldValue() {
71416
71714
  if (this.model.split('.').length > 1) {
71417
71715
  if (TextareaFieldvue_type_script_lang_js_typeof(this.vo[this.model.split('.')[0]]) === 'object' && this.vo[this.model.split('.')[0]] != null) {
@@ -71439,9 +71737,9 @@ function TextareaFieldvue_type_script_lang_js_toPrimitive(t, r) { if ("object" !
71439
71737
  });
71440
71738
  ;// CONCATENATED MODULE: ./packages/ecmapp/Basicform/src/FormField/TextareaField.vue?vue&type=script&lang=js
71441
71739
  /* harmony default export */ var FormField_TextareaFieldvue_type_script_lang_js = (TextareaFieldvue_type_script_lang_js);
71442
- // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[4]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecmapp/Basicform/src/FormField/TextareaField.vue?vue&type=style&index=0&id=7743d246&prod&scoped=true&lang=scss
71443
- var TextareaFieldvue_type_style_index_0_id_7743d246_prod_scoped_true_lang_scss = __webpack_require__(1197);
71444
- ;// CONCATENATED MODULE: ./packages/ecmapp/Basicform/src/FormField/TextareaField.vue?vue&type=style&index=0&id=7743d246&prod&scoped=true&lang=scss
71740
+ // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[4]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/ecmapp/Basicform/src/FormField/TextareaField.vue?vue&type=style&index=0&id=27eb631a&prod&scoped=true&lang=scss
71741
+ var TextareaFieldvue_type_style_index_0_id_27eb631a_prod_scoped_true_lang_scss = __webpack_require__(8619);
71742
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Basicform/src/FormField/TextareaField.vue?vue&type=style&index=0&id=27eb631a&prod&scoped=true&lang=scss
71445
71743
 
71446
71744
  ;// CONCATENATED MODULE: ./packages/ecmapp/Basicform/src/FormField/TextareaField.vue
71447
71745
 
@@ -71454,11 +71752,11 @@ var TextareaFieldvue_type_style_index_0_id_7743d246_prod_scoped_true_lang_scss =
71454
71752
 
71455
71753
  var TextareaField_component = (0,componentNormalizer/* default */.A)(
71456
71754
  FormField_TextareaFieldvue_type_script_lang_js,
71457
- TextareaFieldvue_type_template_id_7743d246_scoped_true_render,
71458
- TextareaFieldvue_type_template_id_7743d246_scoped_true_staticRenderFns,
71755
+ TextareaFieldvue_type_template_id_27eb631a_scoped_true_render,
71756
+ TextareaFieldvue_type_template_id_27eb631a_scoped_true_staticRenderFns,
71459
71757
  false,
71460
71758
  null,
71461
- "7743d246",
71759
+ "27eb631a",
71462
71760
  null
71463
71761
 
71464
71762
  )
@@ -73008,39 +73306,39 @@ var asyncComponents = [
73008
73306
  }],
73009
73307
  // ========== ecmapp/Wflowform 工作流表单子组件 → chunk: m-wflow-form ==========
73010
73308
  ['Attachment', function () {
73011
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431)).then(function (m) {
73309
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609)).then(function (m) {
73012
73310
  return m.Attachment;
73013
73311
  });
73014
73312
  }], ['BodyFile', function () {
73015
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431)).then(function (m) {
73313
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609)).then(function (m) {
73016
73314
  return m.BodyFile;
73017
73315
  });
73018
73316
  }], ['HandleIdea', function () {
73019
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431)).then(function (m) {
73317
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609)).then(function (m) {
73020
73318
  return m.HandleIdea;
73021
73319
  });
73022
73320
  }], ['SelectOuterDeputy', function () {
73023
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431)).then(function (m) {
73321
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609)).then(function (m) {
73024
73322
  return m.SelectOuterDeputy;
73025
73323
  });
73026
73324
  }], ['SubmitHandle', function () {
73027
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431)).then(function (m) {
73325
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609)).then(function (m) {
73028
73326
  return m.SubmitHandle;
73029
73327
  });
73030
73328
  }], ['SubmitDialog', function () {
73031
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431)).then(function (m) {
73329
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609)).then(function (m) {
73032
73330
  return m.SubmitDialog;
73033
73331
  });
73034
73332
  }], ['ShortcutProcessing', function () {
73035
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431)).then(function (m) {
73333
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609)).then(function (m) {
73036
73334
  return m.ShortcutProcessing;
73037
73335
  });
73038
73336
  }], ['WfNodelogList', function () {
73039
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431)).then(function (m) {
73337
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609)).then(function (m) {
73040
73338
  return m.WfNodelogList;
73041
73339
  });
73042
73340
  }], ['WriteToReadIdea', function () {
73043
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431)).then(function (m) {
73341
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609)).then(function (m) {
73044
73342
  return m.WriteToReadIdea;
73045
73343
  });
73046
73344
  }]];
@@ -73093,7 +73391,7 @@ var WfengineModule = function WfengineModule() {
73093
73391
  return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8838));
73094
73392
  };
73095
73393
  var WflowformModule = function WflowformModule() {
73096
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 431));
73394
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4609));
73097
73395
  };
73098
73396
 
73099
73397
  // ---------- 重型功能(PDF/富文本,仅特定页面使用) ----------