ecinc-cloud-mappaio 9.7.32 → 9.7.34

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.
@@ -8756,7 +8756,7 @@ src.install = function (Vue) {
8756
8756
 
8757
8757
  /***/ }),
8758
8758
 
8759
- /***/ 7483:
8759
+ /***/ 5475:
8760
8760
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8761
8761
 
8762
8762
  "use strict";
@@ -12715,8 +12715,8 @@ var SelectOuterDeputy_component = (0,componentNormalizer/* default */.A)(
12715
12715
  )
12716
12716
 
12717
12717
  /* 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=6451f4d6&scoped=true
12719
- var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render = function render() {
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=44733f4f&scoped=true
12719
+ var SubmitHandlevue_type_template_id_44733f4f_scoped_true_render = function render() {
12720
12720
  var _vm = this,
12721
12721
  _c = _vm._self._c;
12722
12722
  return _vm.initiated ? _c('div', {
@@ -12807,7 +12807,9 @@ var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render = function rend
12807
12807
  attrs: {
12808
12808
  "title": "填写意见"
12809
12809
  }
12810
- })], 1), _vm._t("idea-inputbox-top"), _c('van-field', {
12810
+ })], 1), _vm._t("idea-inputbox-top"), _c('div', {
12811
+ staticClass: "idea-input-wrap"
12812
+ }, [_c('van-field', {
12811
12813
  directives: [{
12812
12814
  name: "field-lbl",
12813
12815
  rawName: "v-field-lbl",
@@ -12829,7 +12831,27 @@ var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render = function rend
12829
12831
  },
12830
12832
  expression: "submitHandle.curUserIdea"
12831
12833
  }
12832
- }), _c('van-cell', {
12834
+ }), _vm.voiceInputEnabled ? _c('div', {
12835
+ staticClass: "voice-input-btn",
12836
+ on: {
12837
+ "click": _vm.openVoiceInput
12838
+ }
12839
+ }, [_c('svg', {
12840
+ staticClass: "voice-input-icon",
12841
+ attrs: {
12842
+ "viewBox": "0 0 1024 1024",
12843
+ "fill": "currentColor",
12844
+ "aria-hidden": "true"
12845
+ }
12846
+ }, [_c('path', {
12847
+ attrs: {
12848
+ "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"
12849
+ }
12850
+ }), _c('path', {
12851
+ attrs: {
12852
+ "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"
12853
+ }
12854
+ })])]) : _vm._e()], 1), _c('van-cell', {
12833
12855
  staticClass: "idea-button-container",
12834
12856
  scopedSlots: _vm._u([{
12835
12857
  key: "default",
@@ -13467,9 +13489,19 @@ var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render = function rend
13467
13489
  "task-node": _vm.udmNode,
13468
13490
  "idea-lables": _vm.wfJsonData.ideaLables
13469
13491
  }
13470
- })], 1) : _vm._e()], 2) : _vm._e();
13492
+ })], 1) : _vm._e(), _c('VoiceInputDialog', {
13493
+ attrs: {
13494
+ "visible": _vm.voiceDialogVisible
13495
+ },
13496
+ on: {
13497
+ "update:visible": function updateVisible($event) {
13498
+ _vm.voiceDialogVisible = $event;
13499
+ },
13500
+ "confirm": _vm.onVoiceConfirm
13501
+ }
13502
+ })], 2) : _vm._e();
13471
13503
  };
13472
- var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_staticRenderFns = [];
13504
+ var SubmitHandlevue_type_template_id_44733f4f_scoped_true_staticRenderFns = [];
13473
13505
 
13474
13506
  ;// 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
13475
13507
  var WfTaskNodevue_type_template_id_d1ae2f20_scoped_true_render = function render() {
@@ -14798,14 +14830,572 @@ var WfTaskNode_component = (0,componentNormalizer/* default */.A)(
14798
14830
  )
14799
14831
 
14800
14832
  /* 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=28732777&scoped=true
14834
+ var VoiceInputDialogvue_type_template_id_28732777_scoped_true_render = function render() {
14835
+ var _vm = this,
14836
+ _c = _vm._self._c;
14837
+ return _c('van-popup', {
14838
+ staticClass: "voice-input-popup",
14839
+ attrs: {
14840
+ "round": "",
14841
+ "position": "bottom",
14842
+ "close-on-click-overlay": false
14843
+ },
14844
+ on: {
14845
+ "closed": _vm.onPopupClosed
14846
+ },
14847
+ model: {
14848
+ value: _vm.dialogVisible,
14849
+ callback: function callback($$v) {
14850
+ _vm.dialogVisible = $$v;
14851
+ },
14852
+ expression: "dialogVisible"
14853
+ }
14854
+ }, [_c('div', {
14855
+ staticClass: "voice-popup-header"
14856
+ }, [_c('span', {
14857
+ staticClass: "voice-popup-title"
14858
+ }, [_vm._v(_vm._s(_vm.$tx('ecmapp.wflowform.voiceInput', '语音输入')))]), _c('van-icon', {
14859
+ staticClass: "voice-popup-close",
14860
+ attrs: {
14861
+ "name": "cross"
14862
+ },
14863
+ on: {
14864
+ "click": function click($event) {
14865
+ _vm.dialogVisible = false;
14866
+ }
14867
+ }
14868
+ })], 1), _c('div', {
14869
+ staticClass: "voice-popup-body"
14870
+ }, [_c('div', {
14871
+ staticClass: "voice-mic-btn",
14872
+ class: {
14873
+ recording: _vm.status === 'recording'
14874
+ },
14875
+ on: {
14876
+ "click": _vm.toggleRecord
14877
+ }
14878
+ }, [_vm.status === 'processing' ? _c('van-loading', {
14879
+ attrs: {
14880
+ "color": "#ffffff",
14881
+ "size": "28px"
14882
+ }
14883
+ }) : _c('svg', {
14884
+ staticClass: "voice-mic-icon",
14885
+ attrs: {
14886
+ "viewBox": "0 0 1024 1024",
14887
+ "fill": "currentColor",
14888
+ "aria-hidden": "true"
14889
+ }
14890
+ }, [_c('path', {
14891
+ attrs: {
14892
+ "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"
14893
+ }
14894
+ }), _c('path', {
14895
+ attrs: {
14896
+ "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
+ }
14898
+ })])], 1), _c('div', {
14899
+ staticClass: "voice-status-text",
14900
+ class: {
14901
+ 'is-error': _vm.status === 'error'
14902
+ }
14903
+ }, [_vm._v(_vm._s(_vm.statusText))]), _c('canvas', {
14904
+ directives: [{
14905
+ name: "show",
14906
+ rawName: "v-show",
14907
+ value: _vm.status === 'recording',
14908
+ expression: "status === 'recording'"
14909
+ }],
14910
+ ref: "waveCanvas",
14911
+ staticClass: "voice-wave-canvas"
14912
+ }), _c('div', {
14913
+ directives: [{
14914
+ name: "show",
14915
+ rawName: "v-show",
14916
+ value: _vm.status === 'recording',
14917
+ expression: "status === 'recording'"
14918
+ }],
14919
+ staticClass: "voice-timer"
14920
+ }, [_vm._v(_vm._s(_vm.timerText))]), _c('van-field', {
14921
+ staticClass: "voice-result-field",
14922
+ attrs: {
14923
+ "type": "textarea",
14924
+ "rows": "3",
14925
+ "autosize": "",
14926
+ "readonly": _vm.status === 'recording' || _vm.status === 'processing',
14927
+ "placeholder": _vm.$tx('ecmapp.wflowform.voiceResultHolder', '识别结果将显示在这里,可修改后填入意见。')
14928
+ },
14929
+ model: {
14930
+ value: _vm.resultText,
14931
+ callback: function callback($$v) {
14932
+ _vm.resultText = $$v;
14933
+ },
14934
+ expression: "resultText"
14935
+ }
14936
+ })], 1), _c('div', {
14937
+ staticClass: "voice-popup-footer"
14938
+ }, [_c('van-button', {
14939
+ attrs: {
14940
+ "type": "default",
14941
+ "size": "small",
14942
+ "hairline": ""
14943
+ },
14944
+ on: {
14945
+ "click": function click($event) {
14946
+ _vm.dialogVisible = false;
14947
+ }
14948
+ }
14949
+ }, [_vm._v(_vm._s(_vm.$tx('ecmapp.pageBtns.cancel', '取消')))]), _c('van-button', {
14950
+ attrs: {
14951
+ "type": "info",
14952
+ "size": "small",
14953
+ "hairline": "",
14954
+ "disabled": !_vm.resultText || _vm.resultText.trim() === '' || _vm.status === 'recording' || _vm.status === 'processing'
14955
+ },
14956
+ on: {
14957
+ "click": _vm.confirmVoiceText
14958
+ }
14959
+ }, [_vm._v(_vm._s(_vm.$tx('ecmapp.wflowform.voiceFillOpinion', '填入意见')))])], 1)]);
14960
+ };
14961
+ var VoiceInputDialogvue_type_template_id_28732777_scoped_true_staticRenderFns = [];
14962
+
14963
+ ;// 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
+ /* harmony default export */ var VoiceInputDialogvue_type_script_lang_js = ({
14965
+ name: 'VoiceInputDialog',
14966
+ props: {
14967
+ visible: {
14968
+ type: Boolean,
14969
+ default: false
14970
+ }
14971
+ },
14972
+ data: function data() {
14973
+ return {
14974
+ i18npkg: 'ecmapp',
14975
+ moduleCode: 'wflowform',
14976
+ status: 'idle',
14977
+ // idle:待录音 recording:录音中 processing:识别中(仅后端模式) done:识别完成 error:出错
14978
+ errorText: '',
14979
+ resultText: '',
14980
+ finalText: '',
14981
+ // 浏览器模式已确认的识别文本
14982
+ seconds: 0,
14983
+ timer: null,
14984
+ recognition: null,
14985
+ // 浏览器语音识别实例
14986
+ mediaRecorder: null,
14987
+ // 后端模式录音实例
14988
+ stream: null,
14989
+ // 麦克风音频流
14990
+ audioChunks: [],
14991
+ audioContext: null,
14992
+ // 波形绘制音频上下文
14993
+ analyser: null,
14994
+ // 波形分析节点
14995
+ visualStream: null,
14996
+ // 浏览器模式下专供波形绘制的音频流
14997
+ waveRafId: null,
14998
+ recognizeStartAt: 0 // 识别启动时间戳,用于判断秒退(识别服务不可用)
14999
+ };
15000
+ },
15001
+ computed: {
15002
+ dialogVisible: {
15003
+ get: function get() {
15004
+ return this.visible;
15005
+ },
15006
+ set: function set(val) {
15007
+ this.$emit('update:visible', val);
15008
+ }
15009
+ },
15010
+ // window.voiceToWord为非空字符串且不为browser时,视为后端转写接口URL
15011
+ backendUrl: function backendUrl() {
15012
+ var voiceToWord = window.voiceToWord;
15013
+ return voiceToWord && typeof voiceToWord === 'string' && voiceToWord !== 'browser' ? voiceToWord : '';
15014
+ },
15015
+ statusText: function statusText() {
15016
+ switch (this.status) {
15017
+ case 'recording':
15018
+ return this.$tx('ecmapp.wflowform.voiceRecording', '正在聆听,请说话…');
15019
+ case 'processing':
15020
+ return this.$tx('ecmapp.wflowform.voiceProcessing', '识别中…');
15021
+ case 'done':
15022
+ return this.$tx('ecmapp.wflowform.voiceDone', '识别完成,可修改后填入。');
15023
+ case 'error':
15024
+ return this.errorText;
15025
+ default:
15026
+ return this.$tx('ecmapp.wflowform.voiceIdle', '点击麦克风开始说话');
15027
+ }
15028
+ },
15029
+ timerText: function timerText() {
15030
+ var min = Math.floor(this.seconds / 60);
15031
+ var sec = this.seconds % 60;
15032
+ return (min < 10 ? '0' + min : min) + ':' + (sec < 10 ? '0' + sec : sec);
15033
+ }
15034
+ },
15035
+ watch: {
15036
+ visible: function visible(val) {
15037
+ if (val) {
15038
+ this.resetState();
15039
+ this.preRequestPermission();
15040
+ }
15041
+ }
15042
+ },
15043
+ beforeDestroy: function beforeDestroy() {
15044
+ this.releaseResources();
15045
+ },
15046
+ methods: {
15047
+ resetState: function resetState() {
15048
+ this.status = 'idle';
15049
+ this.errorText = '';
15050
+ this.resultText = '';
15051
+ this.finalText = '';
15052
+ this.seconds = 0;
15053
+ this.audioChunks = [];
15054
+ },
15055
+ // 打开弹窗即预请求麦克风权限,被拒绝时显示引导文案
15056
+ preRequestPermission: function preRequestPermission() {
15057
+ var _this = this;
15058
+ if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
15059
+ navigator.mediaDevices.getUserMedia({
15060
+ audio: true
15061
+ }).then(function (stream) {
15062
+ stream.getTracks().forEach(function (track) {
15063
+ return track.stop();
15064
+ });
15065
+ }).catch(function () {
15066
+ _this.showPermissionError();
15067
+ });
15068
+ }
15069
+ },
15070
+ showPermissionError: function showPermissionError() {
15071
+ this.status = 'error';
15072
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNoPermission', '请在浏览器设置中允许使用麦克风后重试。');
15073
+ },
15074
+ // 手机浏览器/WebView常见:暴露了SpeechRecognition但识别服务不可达(如Google语音服务)
15075
+ showServiceUnavailableError: function showServiceUnavailableError() {
15076
+ this.status = 'error';
15077
+ this.errorText = this.$tx('ecmapp.wflowform.voiceServiceUnavailable', '当前浏览器无法连接语音识别服务。');
15078
+ },
15079
+ toggleRecord: function toggleRecord() {
15080
+ if (this.status === 'processing') return;
15081
+ if (this.status === 'recording') {
15082
+ this.stopRecord();
15083
+ } else {
15084
+ this.startRecord();
15085
+ }
15086
+ },
15087
+ startRecord: function startRecord() {
15088
+ this.resultText = '';
15089
+ this.finalText = '';
15090
+ if (this.backendUrl) {
15091
+ this.startBackendRecord();
15092
+ } else {
15093
+ this.startBrowserRecognition();
15094
+ }
15095
+ },
15096
+ stopRecord: function stopRecord() {
15097
+ this.stopTimer();
15098
+ if (this.recognition) {
15099
+ this.recognition.stop();
15100
+ }
15101
+ if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {
15102
+ this.mediaRecorder.stop();
15103
+ }
15104
+ },
15105
+ startTimer: function startTimer() {
15106
+ var _this2 = this;
15107
+ this.seconds = 0;
15108
+ this.timer = setInterval(function () {
15109
+ _this2.seconds++;
15110
+ }, 1000);
15111
+ },
15112
+ stopTimer: function stopTimer() {
15113
+ if (this.timer) {
15114
+ clearInterval(this.timer);
15115
+ this.timer = null;
15116
+ }
15117
+ },
15118
+ // 浏览器模式:Web Speech API直转文字,中间结果实时上屏
15119
+ startBrowserRecognition: function startBrowserRecognition() {
15120
+ var _this3 = this;
15121
+ var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
15122
+ if (!SpeechRecognition) {
15123
+ this.status = 'error';
15124
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNotSupport', '当前浏览器不支持语音识别。');
15125
+ return;
15126
+ }
15127
+ var recognition = new SpeechRecognition();
15128
+ recognition.lang = 'zh-CN';
15129
+ recognition.continuous = true;
15130
+ recognition.interimResults = true;
15131
+ recognition.onstart = function () {
15132
+ _this3.status = 'recording';
15133
+ _this3.startTimer();
15134
+ _this3.startVisualStream();
15135
+ };
15136
+ recognition.onresult = function (event) {
15137
+ var interimText = '';
15138
+ for (var i = event.resultIndex; i < event.results.length; i++) {
15139
+ if (event.results[i].isFinal) {
15140
+ _this3.finalText += event.results[i][0].transcript;
15141
+ } else {
15142
+ interimText += event.results[i][0].transcript;
15143
+ }
15144
+ }
15145
+ _this3.resultText = _this3.finalText + interimText;
15146
+ };
15147
+ recognition.onerror = function (event) {
15148
+ _this3.stopTimer();
15149
+ _this3.stopWaveform();
15150
+ if (event.error === 'not-allowed' || event.error === 'service-not-allowed') {
15151
+ _this3.showPermissionError();
15152
+ } else if (event.error === 'network') {
15153
+ _this3.showServiceUnavailableError();
15154
+ } else if (event.error === 'no-speech') {
15155
+ _this3.status = 'error';
15156
+ _this3.errorText = _this3.$tx('ecmapp.wflowform.voiceNoSpeech', '未检测到语音,请重试。');
15157
+ } else if (event.error !== 'aborted') {
15158
+ _this3.status = 'error';
15159
+ _this3.errorText = _this3.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15160
+ }
15161
+ };
15162
+ recognition.onend = function () {
15163
+ _this3.stopTimer();
15164
+ _this3.stopWaveform();
15165
+ _this3.recognition = null;
15166
+ if (_this3.status === 'recording') {
15167
+ _this3.resultText = _this3.finalText;
15168
+ if (_this3.resultText.trim() !== '') {
15169
+ _this3.status = 'done';
15170
+ } else if (Date.now() - _this3.recognizeStartAt < 1500) {
15171
+ // 启动后秒退且无任何结果,判定为识别服务不可用
15172
+ _this3.showServiceUnavailableError();
15173
+ } else {
15174
+ _this3.status = 'idle';
15175
+ }
15176
+ }
15177
+ };
15178
+ this.recognition = recognition;
15179
+ this.recognizeStartAt = Date.now();
15180
+ recognition.start();
15181
+ },
15182
+ // 后端模式:录音→上传→转文字
15183
+ startBackendRecord: function startBackendRecord() {
15184
+ var _this4 = this;
15185
+ if (!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) {
15186
+ this.status = 'error';
15187
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNotSupport', '当前浏览器不支持语音识别。');
15188
+ return;
15189
+ }
15190
+ navigator.mediaDevices.getUserMedia({
15191
+ audio: true
15192
+ }).then(function (stream) {
15193
+ _this4.stream = stream;
15194
+ _this4.audioChunks = [];
15195
+ var mimeType = window.MediaRecorder && MediaRecorder.isTypeSupported('audio/webm;codecs=opus') ? 'audio/webm;codecs=opus' : '';
15196
+ var mediaRecorder = mimeType ? new MediaRecorder(stream, {
15197
+ mimeType: mimeType
15198
+ }) : new MediaRecorder(stream);
15199
+ mediaRecorder.ondataavailable = function (event) {
15200
+ if (event.data && event.data.size > 0) {
15201
+ _this4.audioChunks.push(event.data);
15202
+ }
15203
+ };
15204
+ mediaRecorder.onstart = function () {
15205
+ _this4.status = 'recording';
15206
+ _this4.startTimer();
15207
+ _this4.startWaveform(stream);
15208
+ };
15209
+ mediaRecorder.onstop = function () {
15210
+ _this4.stopTimer();
15211
+ _this4.stopWaveform();
15212
+ _this4.releaseStream();
15213
+ _this4.mediaRecorder = null;
15214
+ // 弹窗已关闭(取消录音)则不再上传
15215
+ if (_this4.visible && _this4.audioChunks.length > 0) {
15216
+ _this4.uploadVoice();
15217
+ }
15218
+ };
15219
+ _this4.mediaRecorder = mediaRecorder;
15220
+ mediaRecorder.start();
15221
+ }).catch(function () {
15222
+ _this4.showPermissionError();
15223
+ });
15224
+ },
15225
+ uploadVoice: function uploadVoice() {
15226
+ var _this5 = this;
15227
+ this.status = 'processing';
15228
+ var voiceBlob = new Blob(this.audioChunks, {
15229
+ type: this.audioChunks[0].type || 'audio/webm'
15230
+ });
15231
+ var formData = new FormData();
15232
+ formData.append('voiceFile', voiceBlob, 'voice.webm');
15233
+ formData.append('format', 'webm');
15234
+ formData.append('lang', 'zh-CN');
15235
+ this.$http({
15236
+ method: 'POST',
15237
+ url: this.backendUrl,
15238
+ headers: {
15239
+ 'Content-Type': 'multipart/form-data'
15240
+ },
15241
+ data: formData
15242
+ }).then(function (res) {
15243
+ if (res.code === 'success') {
15244
+ _this5.resultText = res.body && res.body.text || '';
15245
+ _this5.status = _this5.resultText.trim() !== '' ? 'done' : 'error';
15246
+ if (_this5.status === 'error') {
15247
+ _this5.errorText = _this5.$tx('ecmapp.wflowform.voiceNoSpeech', '未检测到语音,请重试。');
15248
+ }
15249
+ } else {
15250
+ _this5.status = 'error';
15251
+ _this5.errorText = res.message || _this5.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15252
+ }
15253
+ }).catch(function () {
15254
+ _this5.status = 'error';
15255
+ _this5.errorText = _this5.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15256
+ });
15257
+ },
15258
+ releaseStream: function releaseStream() {
15259
+ if (this.stream) {
15260
+ this.stream.getTracks().forEach(function (track) {
15261
+ return track.stop();
15262
+ });
15263
+ this.stream = null;
15264
+ }
15265
+ },
15266
+ // 浏览器模式下SpeechRecognition不暴露音频流,单独取一路流用于波形绘制
15267
+ startVisualStream: function startVisualStream() {
15268
+ var _this6 = this;
15269
+ if (!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) return;
15270
+ navigator.mediaDevices.getUserMedia({
15271
+ audio: true
15272
+ }).then(function (stream) {
15273
+ // 取流回来时录音可能已结束
15274
+ if (_this6.status !== 'recording') {
15275
+ stream.getTracks().forEach(function (track) {
15276
+ return track.stop();
15277
+ });
15278
+ return;
15279
+ }
15280
+ _this6.visualStream = stream;
15281
+ _this6.startWaveform(stream);
15282
+ }).catch(function () {});
15283
+ },
15284
+ // 用AnalyserNode实时绘制录音波形柱状图
15285
+ startWaveform: function startWaveform(stream) {
15286
+ var _this7 = this;
15287
+ var AudioContextClass = window.AudioContext || window.webkitAudioContext;
15288
+ var canvas = this.$refs.waveCanvas;
15289
+ if (!AudioContextClass || !canvas) return;
15290
+ var audioContext = new AudioContextClass();
15291
+ var analyser = audioContext.createAnalyser();
15292
+ analyser.fftSize = 128;
15293
+ audioContext.createMediaStreamSource(stream).connect(analyser);
15294
+ this.audioContext = audioContext;
15295
+ this.analyser = analyser;
15296
+ var dpr = window.devicePixelRatio || 1;
15297
+ canvas.width = canvas.clientWidth * dpr;
15298
+ canvas.height = canvas.clientHeight * dpr;
15299
+ var ctx = canvas.getContext('2d');
15300
+ var dataArray = new Uint8Array(analyser.frequencyBinCount);
15301
+ var barCount = 32;
15302
+ var gap = 2 * dpr;
15303
+ var barWidth = (canvas.width - gap * (barCount - 1)) / barCount;
15304
+ var centerY = canvas.height / 2;
15305
+ var draw = function draw() {
15306
+ if (!_this7.analyser) return;
15307
+ _this7.waveRafId = requestAnimationFrame(draw);
15308
+ _this7.analyser.getByteFrequencyData(dataArray);
15309
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
15310
+ ctx.fillStyle = '#1989fa';
15311
+ for (var i = 0; i < barCount; i++) {
15312
+ var value = dataArray[Math.floor(i * dataArray.length / barCount)] / 255;
15313
+ var barHeight = Math.max(2 * dpr, value * canvas.height);
15314
+ var x = i * (barWidth + gap);
15315
+ ctx.fillRect(x, centerY - barHeight / 2, barWidth, barHeight);
15316
+ }
15317
+ };
15318
+ draw();
15319
+ },
15320
+ stopWaveform: function stopWaveform() {
15321
+ if (this.waveRafId) {
15322
+ cancelAnimationFrame(this.waveRafId);
15323
+ this.waveRafId = null;
15324
+ }
15325
+ if (this.audioContext) {
15326
+ this.audioContext.close().catch(function () {});
15327
+ this.audioContext = null;
15328
+ }
15329
+ this.analyser = null;
15330
+ if (this.visualStream) {
15331
+ this.visualStream.getTracks().forEach(function (track) {
15332
+ return track.stop();
15333
+ });
15334
+ this.visualStream = null;
15335
+ }
15336
+ },
15337
+ // 关闭/取消时释放麦克风等资源
15338
+ releaseResources: function releaseResources() {
15339
+ this.stopTimer();
15340
+ this.stopWaveform();
15341
+ if (this.recognition) {
15342
+ this.recognition.abort();
15343
+ this.recognition = null;
15344
+ }
15345
+ if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {
15346
+ this.mediaRecorder.stop();
15347
+ }
15348
+ this.mediaRecorder = null;
15349
+ this.releaseStream();
15350
+ },
15351
+ onPopupClosed: function onPopupClosed() {
15352
+ this.releaseResources();
15353
+ },
15354
+ confirmVoiceText: function confirmVoiceText() {
15355
+ var text = this.resultText.trim();
15356
+ if (text === '') return;
15357
+ this.$emit('confirm', text);
15358
+ this.dialogVisible = false;
15359
+ }
15360
+ }
15361
+ });
15362
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=script&lang=js
15363
+ /* harmony default export */ var src_VoiceInputDialogvue_type_script_lang_js = (VoiceInputDialogvue_type_script_lang_js);
15364
+ // 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=28732777&prod&scoped=true&lang=scss
15365
+ var VoiceInputDialogvue_type_style_index_0_id_28732777_prod_scoped_true_lang_scss = __webpack_require__(3727);
15366
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=style&index=0&id=28732777&prod&scoped=true&lang=scss
15367
+
15368
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue
15369
+
15370
+
15371
+
15372
+ ;
15373
+
15374
+
15375
+ /* normalize component */
15376
+
15377
+ var VoiceInputDialog_component = (0,componentNormalizer/* default */.A)(
15378
+ src_VoiceInputDialogvue_type_script_lang_js,
15379
+ VoiceInputDialogvue_type_template_id_28732777_scoped_true_render,
15380
+ VoiceInputDialogvue_type_template_id_28732777_scoped_true_staticRenderFns,
15381
+ false,
15382
+ null,
15383
+ "28732777",
15384
+ null
15385
+
15386
+ )
15387
+
15388
+ /* harmony default export */ var VoiceInputDialog = (VoiceInputDialog_component.exports);
14801
15389
  ;// 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/SubmitHandle.vue?vue&type=script&lang=js
14802
15390
  function SubmitHandlevue_type_script_lang_js_typeof(o) { "@babel/helpers - typeof"; return SubmitHandlevue_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; }, SubmitHandlevue_type_script_lang_js_typeof(o); }
14803
15391
  var moment = __webpack_require__(5093);
14804
15392
 
15393
+
14805
15394
  /* harmony default export */ var SubmitHandlevue_type_script_lang_js = ({
14806
15395
  name: 'SubmitHandle',
14807
15396
  components: {
14808
- WfTaskNode: WfTaskNode
15397
+ WfTaskNode: WfTaskNode,
15398
+ VoiceInputDialog: VoiceInputDialog
14809
15399
  },
14810
15400
  props: {
14811
15401
  curTN: {
@@ -14939,7 +15529,11 @@ var moment = __webpack_require__(5093);
14939
15529
  defaultNumber: 8,
14940
15530
  // 超出默认展示两行(个数)
14941
15531
  viewCommentsNum: 8,
14942
- selectedUsersCount: {} //节点已选择人数
15532
+ selectedUsersCount: {},
15533
+ //节点已选择人数
15534
+ voiceDialogVisible: false,
15535
+ // 语音输入弹窗
15536
+ voiceInputEnabled: false // 当前环境是否支持语音输入
14943
15537
  };
14944
15538
  },
14945
15539
  computed: {
@@ -14982,6 +15576,7 @@ var moment = __webpack_require__(5093);
14982
15576
  },
14983
15577
  created: function created() {
14984
15578
  // this.setMargin()
15579
+ this.initVoiceInputEnabled();
14985
15580
  this.$bus.on('initSubmitHandle', this.initSubmitHandle);
14986
15581
  },
14987
15582
  beforeDestroy: function beforeDestroy() {
@@ -15008,6 +15603,26 @@ var moment = __webpack_require__(5093);
15008
15603
  }
15009
15604
  },
15010
15605
  methods: {
15606
+ // 检测语音输入按钮可用性:未配置window.voiceToWord时需https/localhost安全上下文且浏览器支持Web Speech API,否则不显示按钮
15607
+ initVoiceInputEnabled: function initVoiceInputEnabled() {
15608
+ var voiceToWord = window.voiceToWord;
15609
+ if (voiceToWord && typeof voiceToWord === 'string' && voiceToWord !== 'browser') {
15610
+ // 后端接口转文字:需getUserMedia录音(同样仅安全上下文下可用)
15611
+ this.voiceInputEnabled = !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
15612
+ } else {
15613
+ // 浏览器直转文字:需安全上下文且支持SpeechRecognition
15614
+ this.voiceInputEnabled = window.isSecureContext === true && ('webkitSpeechRecognition' in window || 'SpeechRecognition' in window);
15615
+ }
15616
+ },
15617
+ openVoiceInput: function openVoiceInput() {
15618
+ this.voiceDialogVisible = true;
15619
+ },
15620
+ onVoiceConfirm: function onVoiceConfirm(text) {
15621
+ if (!text) return;
15622
+ var curUserIdea = this.submitHandle.curUserIdea;
15623
+ this.$set(this.submitHandle, 'curUserIdea', curUserIdea && curUserIdea.trim() !== '' ? curUserIdea + ' ' + text : text);
15624
+ this.$forceUpdate();
15625
+ },
15011
15626
  // 计算边距
15012
15627
  setMargin: function setMargin() {
15013
15628
  var columnsNum = Math.floor((screen.width - 20) / 93); // 列数
@@ -15792,9 +16407,9 @@ var moment = __webpack_require__(5093);
15792
16407
  });
15793
16408
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=script&lang=js
15794
16409
  /* harmony default export */ var src_SubmitHandlevue_type_script_lang_js = (SubmitHandlevue_type_script_lang_js);
15795
- // 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=6451f4d6&prod&scoped=true&lang=scss
15796
- var SubmitHandlevue_type_style_index_0_id_6451f4d6_prod_scoped_true_lang_scss = __webpack_require__(5622);
15797
- ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=style&index=0&id=6451f4d6&prod&scoped=true&lang=scss
16410
+ // 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=44733f4f&prod&scoped=true&lang=scss
16411
+ var SubmitHandlevue_type_style_index_0_id_44733f4f_prod_scoped_true_lang_scss = __webpack_require__(5099);
16412
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=style&index=0&id=44733f4f&prod&scoped=true&lang=scss
15798
16413
 
15799
16414
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue
15800
16415
 
@@ -15807,11 +16422,11 @@ var SubmitHandlevue_type_style_index_0_id_6451f4d6_prod_scoped_true_lang_scss =
15807
16422
 
15808
16423
  var SubmitHandle_component = (0,componentNormalizer/* default */.A)(
15809
16424
  src_SubmitHandlevue_type_script_lang_js,
15810
- SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render,
15811
- SubmitHandlevue_type_template_id_6451f4d6_scoped_true_staticRenderFns,
16425
+ SubmitHandlevue_type_template_id_44733f4f_scoped_true_render,
16426
+ SubmitHandlevue_type_template_id_44733f4f_scoped_true_staticRenderFns,
15812
16427
  false,
15813
16428
  null,
15814
- "6451f4d6",
16429
+ "44733f4f",
15815
16430
  null
15816
16431
 
15817
16432
  )
@@ -22251,7 +22866,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".submit-dialog-container[data-v-9c230b
22251
22866
 
22252
22867
  /***/ }),
22253
22868
 
22254
- /***/ 1860:
22869
+ /***/ 9969:
22255
22870
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
22256
22871
 
22257
22872
  "use strict";
@@ -22270,7 +22885,28 @@ var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require
22270
22885
  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()));
22271
22886
  var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);
22272
22887
  // Module
22273
- ___CSS_LOADER_EXPORT___.push([module.id, ".submit-handle-container .idea-button-container .van-cell__value[data-v-6451f4d6]{text-align:right}.submit-handle-container .idea-button-container .van-cell__value .van-button[data-v-6451f4d6]{margin-right:0;margin-left:5px}.submit-handle-container .curIdea-filed[data-v-6451f4d6] .van-cell__title,.submit-handle-container .curIdea-filed[data-v-6451f4d6]:after{display:none}.submit-handle-container .clearfix[data-v-6451f4d6]:after{content:\".\";display:block;height:0;clear:both;visibility:hidden}.submit-handle-container[data-v-6451f4d6] .van-radio-group .van-cell__title{font-weight:400!important}.submit-handle-container .van-wflow-operate-detail-cell[data-v-6451f4d6]:after{border-top-width:0}.submit-handle-container .van-wflow-operate-detail-cell-path[data-v-6451f4d6]:after{border-width:1px;-webkit-transform:scale(.5);transform:scale(.5)}.submit-handle-container[data-v-6451f4d6] .tnLimit-container .van-field{width:50px;display:inline-block;padding:0}.submit-handle-container[data-v-6451f4d6] .tnLimit-container .van-field .van-field__body input{text-align:center}.submit-handle-container[data-v-6451f4d6] .tnLimit-container .van-field__body:after{color:#323233;content:attr(value-suffix);word-break:keep-all}.submit-handle-container .delete-icon[data-v-6451f4d6]{display:-webkit-box;display:-ms-flexbox;display:flex;float:right}.submit-handle-container .delete-icon .van-icon[data-v-6451f4d6]{line-height:24px;margin-left:5px;font-size:16px}.selectBox_title[data-v-6451f4d6]{height:45px;line-height:45px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:14px}.selectBox_content[data-v-6451f4d6],.selectBox_title[data-v-6451f4d6]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 15px}.selectBox_content[data-v-6451f4d6]{-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-6451f4d6]{border:1px solid #f1f1f1}.selectBox_content .selectBox_content_son[data-v-6451f4d6],.selectBox_content .selectBox_content_son_change[data-v-6451f4d6]{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-6451f4d6]{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-6451f4d6]{white-space:nowrap;overflow:hidden;overflow-x:scroll;-webkit-overflow-scrolling:touch}.selectBox_content_sonall[data-v-6451f4d6]:nth-child(4n){margin-right:0}.selectBox_content_sonall[data-v-6451f4d6]::-webkit-scrollbar{display:none}.viewAllComments[data-v-6451f4d6]{height:45px;line-height:45px;text-align:center;color:#b7b7b7;font-size:12px;background:#fff;display:block;width:100%}", ""]);
22888
+ ___CSS_LOADER_EXPORT___.push([module.id, ".submit-handle-container .idea-button-container .van-cell__value[data-v-44733f4f]{text-align:right}.submit-handle-container .idea-button-container .van-cell__value .van-button[data-v-44733f4f]{margin-right:0;margin-left:5px}.submit-handle-container .curIdea-filed[data-v-44733f4f] .van-cell__title,.submit-handle-container .curIdea-filed[data-v-44733f4f]:after{display:none}.submit-handle-container .idea-input-wrap[data-v-44733f4f]{position:relative}.submit-handle-container .idea-input-wrap[data-v-44733f4f] .curIdea-filed textarea{padding-right:30px}.submit-handle-container .idea-input-wrap .voice-input-btn[data-v-44733f4f]{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-44733f4f]{width:16px;height:16px}.submit-handle-container .idea-input-wrap .voice-input-btn[data-v-44733f4f]:active{background-color:#ebedf0;color:#1989fa}.submit-handle-container .clearfix[data-v-44733f4f]:after{content:\".\";display:block;height:0;clear:both;visibility:hidden}.submit-handle-container[data-v-44733f4f] .van-radio-group .van-cell__title{font-weight:400!important}.submit-handle-container .van-wflow-operate-detail-cell[data-v-44733f4f]:after{border-top-width:0}.submit-handle-container .van-wflow-operate-detail-cell-path[data-v-44733f4f]:after{border-width:1px;-webkit-transform:scale(.5);transform:scale(.5)}.submit-handle-container[data-v-44733f4f] .tnLimit-container .van-field{width:50px;display:inline-block;padding:0}.submit-handle-container[data-v-44733f4f] .tnLimit-container .van-field .van-field__body input{text-align:center}.submit-handle-container[data-v-44733f4f] .tnLimit-container .van-field__body:after{color:#323233;content:attr(value-suffix);word-break:keep-all}.submit-handle-container .delete-icon[data-v-44733f4f]{display:-webkit-box;display:-ms-flexbox;display:flex;float:right}.submit-handle-container .delete-icon .van-icon[data-v-44733f4f]{line-height:24px;margin-left:5px;font-size:16px}.selectBox_title[data-v-44733f4f]{height:45px;line-height:45px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:14px}.selectBox_content[data-v-44733f4f],.selectBox_title[data-v-44733f4f]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 15px}.selectBox_content[data-v-44733f4f]{-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-44733f4f]{border:1px solid #f1f1f1}.selectBox_content .selectBox_content_son[data-v-44733f4f],.selectBox_content .selectBox_content_son_change[data-v-44733f4f]{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-44733f4f]{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-44733f4f]{white-space:nowrap;overflow:hidden;overflow-x:scroll;-webkit-overflow-scrolling:touch}.selectBox_content_sonall[data-v-44733f4f]:nth-child(4n){margin-right:0}.selectBox_content_sonall[data-v-44733f4f]::-webkit-scrollbar{display:none}.viewAllComments[data-v-44733f4f]{height:45px;line-height:45px;text-align:center;color:#b7b7b7;font-size:12px;background:#fff;display:block;width:100%}", ""]);
22889
+ // Exports
22890
+ /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
22891
+
22892
+
22893
+ /***/ }),
22894
+
22895
+ /***/ 2737:
22896
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
22897
+
22898
+ "use strict";
22899
+ __webpack_require__.r(__webpack_exports__);
22900
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1601);
22901
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
22902
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6314);
22903
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
22904
+ // Imports
22905
+
22906
+
22907
+ 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()));
22908
+ // Module
22909
+ ___CSS_LOADER_EXPORT___.push([module.id, ".voice-input-popup[data-v-28732777]{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.voice-input-popup .voice-popup-header[data-v-28732777]{position:relative;height:48px;line-height:48px;text-align:center}.voice-input-popup .voice-popup-header .voice-popup-title[data-v-28732777]{font-size:16px;font-weight:600;color:#323233}.voice-input-popup .voice-popup-header .voice-popup-close[data-v-28732777]{position:absolute;right:16px;top:16px;font-size:16px;color:#c8c9cc}.voice-input-popup .voice-popup-body[data-v-28732777]{padding:8px 16px 0;text-align:center}.voice-input-popup .voice-popup-body .voice-mic-btn[data-v-28732777]{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-28732777]{width:28px;height:28px}.voice-input-popup .voice-popup-body .voice-mic-btn.recording[data-v-28732777]{background-color:#ee0a24;-webkit-animation:voice-breathe-28732777 1.5s ease-out infinite;animation:voice-breathe-28732777 1.5s ease-out infinite}.voice-input-popup .voice-popup-body .voice-status-text[data-v-28732777]{margin-top:12px;font-size:13px;color:#646566}.voice-input-popup .voice-popup-body .voice-status-text.is-error[data-v-28732777]{color:#ee0a24}.voice-input-popup .voice-popup-body .voice-wave-canvas[data-v-28732777]{display:block;width:200px;height:32px;margin:8px auto 0}.voice-input-popup .voice-popup-body .voice-timer[data-v-28732777]{margin-top:4px;font-size:13px;color:#969799}.voice-input-popup .voice-popup-body .voice-result-field[data-v-28732777]{margin-top:12px;background-color:#f7f8fa;border-radius:8px}.voice-input-popup .voice-popup-footer[data-v-28732777]{padding:12px 16px;text-align:right}.voice-input-popup .voice-popup-footer .van-button[data-v-28732777]{margin-left:8px;min-width:80px}@-webkit-keyframes voice-breathe-28732777{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-28732777{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)}}", ""]);
22274
22910
  // Exports
22275
22911
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
22276
22912
 
@@ -49902,19 +50538,35 @@ var update = add("780551c7", content, true, {"sourceMap":false,"shadowMode":fals
49902
50538
 
49903
50539
  /***/ }),
49904
50540
 
49905
- /***/ 5622:
50541
+ /***/ 5099:
50542
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
50543
+
50544
+ // style-loader: Adds some css to the DOM by adding a <style> tag
50545
+
50546
+ // load the styles
50547
+ var content = __webpack_require__(9969);
50548
+ if(content.__esModule) content = content.default;
50549
+ if(typeof content === 'string') content = [[module.id, content, '']];
50550
+ if(content.locals) module.exports = content.locals;
50551
+ // add the styles to the DOM
50552
+ var add = (__webpack_require__(9548)/* ["default"] */ .A)
50553
+ var update = add("54a54a44", content, true, {"sourceMap":false,"shadowMode":false});
50554
+
50555
+ /***/ }),
50556
+
50557
+ /***/ 3727:
49906
50558
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
49907
50559
 
49908
50560
  // style-loader: Adds some css to the DOM by adding a <style> tag
49909
50561
 
49910
50562
  // load the styles
49911
- var content = __webpack_require__(1860);
50563
+ var content = __webpack_require__(2737);
49912
50564
  if(content.__esModule) content = content.default;
49913
50565
  if(typeof content === 'string') content = [[module.id, content, '']];
49914
50566
  if(content.locals) module.exports = content.locals;
49915
50567
  // add the styles to the DOM
49916
50568
  var add = (__webpack_require__(9548)/* ["default"] */ .A)
49917
- var update = add("6a73229d", content, true, {"sourceMap":false,"shadowMode":false});
50569
+ var update = add("b716a02c", content, true, {"sourceMap":false,"shadowMode":false});
49918
50570
 
49919
50571
  /***/ }),
49920
50572
 
@@ -72293,39 +72945,39 @@ var asyncComponents = [
72293
72945
  }],
72294
72946
  // ========== ecmapp/Wflowform 工作流表单子组件 → chunk: m-wflow-form ==========
72295
72947
  ['Attachment', function () {
72296
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483)).then(function (m) {
72948
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475)).then(function (m) {
72297
72949
  return m.Attachment;
72298
72950
  });
72299
72951
  }], ['BodyFile', function () {
72300
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483)).then(function (m) {
72952
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475)).then(function (m) {
72301
72953
  return m.BodyFile;
72302
72954
  });
72303
72955
  }], ['HandleIdea', function () {
72304
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483)).then(function (m) {
72956
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475)).then(function (m) {
72305
72957
  return m.HandleIdea;
72306
72958
  });
72307
72959
  }], ['SelectOuterDeputy', function () {
72308
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483)).then(function (m) {
72960
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475)).then(function (m) {
72309
72961
  return m.SelectOuterDeputy;
72310
72962
  });
72311
72963
  }], ['SubmitHandle', function () {
72312
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483)).then(function (m) {
72964
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475)).then(function (m) {
72313
72965
  return m.SubmitHandle;
72314
72966
  });
72315
72967
  }], ['SubmitDialog', function () {
72316
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483)).then(function (m) {
72968
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475)).then(function (m) {
72317
72969
  return m.SubmitDialog;
72318
72970
  });
72319
72971
  }], ['ShortcutProcessing', function () {
72320
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483)).then(function (m) {
72972
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475)).then(function (m) {
72321
72973
  return m.ShortcutProcessing;
72322
72974
  });
72323
72975
  }], ['WfNodelogList', function () {
72324
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483)).then(function (m) {
72976
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475)).then(function (m) {
72325
72977
  return m.WfNodelogList;
72326
72978
  });
72327
72979
  }], ['WriteToReadIdea', function () {
72328
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483)).then(function (m) {
72980
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475)).then(function (m) {
72329
72981
  return m.WriteToReadIdea;
72330
72982
  });
72331
72983
  }]];
@@ -72378,7 +73030,7 @@ var WfengineModule = function WfengineModule() {
72378
73030
  return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8838));
72379
73031
  };
72380
73032
  var WflowformModule = function WflowformModule() {
72381
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7483));
73033
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 5475));
72382
73034
  };
72383
73035
 
72384
73036
  // ---------- 重型功能(PDF/富文本,仅特定页面使用) ----------