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.
@@ -8766,7 +8766,7 @@ src.install = function (Vue) {
8766
8766
 
8767
8767
  /***/ }),
8768
8768
 
8769
- /***/ 9630:
8769
+ /***/ 8866:
8770
8770
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8771
8771
 
8772
8772
  "use strict";
@@ -12725,8 +12725,8 @@ var SelectOuterDeputy_component = (0,componentNormalizer/* default */.A)(
12725
12725
  )
12726
12726
 
12727
12727
  /* harmony default export */ var SelectOuterDeputy = (SelectOuterDeputy_component.exports);
12728
- ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
12729
- var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render = function render() {
12728
+ ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
12729
+ var SubmitHandlevue_type_template_id_44733f4f_scoped_true_render = function render() {
12730
12730
  var _vm = this,
12731
12731
  _c = _vm._self._c;
12732
12732
  return _vm.initiated ? _c('div', {
@@ -12817,7 +12817,9 @@ var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render = function rend
12817
12817
  attrs: {
12818
12818
  "title": "填写意见"
12819
12819
  }
12820
- })], 1), _vm._t("idea-inputbox-top"), _c('van-field', {
12820
+ })], 1), _vm._t("idea-inputbox-top"), _c('div', {
12821
+ staticClass: "idea-input-wrap"
12822
+ }, [_c('van-field', {
12821
12823
  directives: [{
12822
12824
  name: "field-lbl",
12823
12825
  rawName: "v-field-lbl",
@@ -12839,7 +12841,27 @@ var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render = function rend
12839
12841
  },
12840
12842
  expression: "submitHandle.curUserIdea"
12841
12843
  }
12842
- }), _c('van-cell', {
12844
+ }), _vm.voiceInputEnabled ? _c('div', {
12845
+ staticClass: "voice-input-btn",
12846
+ on: {
12847
+ "click": _vm.openVoiceInput
12848
+ }
12849
+ }, [_c('svg', {
12850
+ staticClass: "voice-input-icon",
12851
+ attrs: {
12852
+ "viewBox": "0 0 1024 1024",
12853
+ "fill": "currentColor",
12854
+ "aria-hidden": "true"
12855
+ }
12856
+ }, [_c('path', {
12857
+ attrs: {
12858
+ "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"
12859
+ }
12860
+ }), _c('path', {
12861
+ attrs: {
12862
+ "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"
12863
+ }
12864
+ })])]) : _vm._e()], 1), _c('van-cell', {
12843
12865
  staticClass: "idea-button-container",
12844
12866
  scopedSlots: _vm._u([{
12845
12867
  key: "default",
@@ -13477,9 +13499,19 @@ var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render = function rend
13477
13499
  "task-node": _vm.udmNode,
13478
13500
  "idea-lables": _vm.wfJsonData.ideaLables
13479
13501
  }
13480
- })], 1) : _vm._e()], 2) : _vm._e();
13502
+ })], 1) : _vm._e(), _c('VoiceInputDialog', {
13503
+ attrs: {
13504
+ "visible": _vm.voiceDialogVisible
13505
+ },
13506
+ on: {
13507
+ "update:visible": function updateVisible($event) {
13508
+ _vm.voiceDialogVisible = $event;
13509
+ },
13510
+ "confirm": _vm.onVoiceConfirm
13511
+ }
13512
+ })], 2) : _vm._e();
13481
13513
  };
13482
- var SubmitHandlevue_type_template_id_6451f4d6_scoped_true_staticRenderFns = [];
13514
+ var SubmitHandlevue_type_template_id_44733f4f_scoped_true_staticRenderFns = [];
13483
13515
 
13484
13516
  ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
13485
13517
  var WfTaskNodevue_type_template_id_d1ae2f20_scoped_true_render = function render() {
@@ -14808,14 +14840,572 @@ var WfTaskNode_component = (0,componentNormalizer/* default */.A)(
14808
14840
  )
14809
14841
 
14810
14842
  /* harmony default export */ var WfTaskNode = (WfTaskNode_component.exports);
14843
+ ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
14844
+ var VoiceInputDialogvue_type_template_id_28732777_scoped_true_render = function render() {
14845
+ var _vm = this,
14846
+ _c = _vm._self._c;
14847
+ return _c('van-popup', {
14848
+ staticClass: "voice-input-popup",
14849
+ attrs: {
14850
+ "round": "",
14851
+ "position": "bottom",
14852
+ "close-on-click-overlay": false
14853
+ },
14854
+ on: {
14855
+ "closed": _vm.onPopupClosed
14856
+ },
14857
+ model: {
14858
+ value: _vm.dialogVisible,
14859
+ callback: function callback($$v) {
14860
+ _vm.dialogVisible = $$v;
14861
+ },
14862
+ expression: "dialogVisible"
14863
+ }
14864
+ }, [_c('div', {
14865
+ staticClass: "voice-popup-header"
14866
+ }, [_c('span', {
14867
+ staticClass: "voice-popup-title"
14868
+ }, [_vm._v(_vm._s(_vm.$tx('ecmapp.wflowform.voiceInput', '语音输入')))]), _c('van-icon', {
14869
+ staticClass: "voice-popup-close",
14870
+ attrs: {
14871
+ "name": "cross"
14872
+ },
14873
+ on: {
14874
+ "click": function click($event) {
14875
+ _vm.dialogVisible = false;
14876
+ }
14877
+ }
14878
+ })], 1), _c('div', {
14879
+ staticClass: "voice-popup-body"
14880
+ }, [_c('div', {
14881
+ staticClass: "voice-mic-btn",
14882
+ class: {
14883
+ recording: _vm.status === 'recording'
14884
+ },
14885
+ on: {
14886
+ "click": _vm.toggleRecord
14887
+ }
14888
+ }, [_vm.status === 'processing' ? _c('van-loading', {
14889
+ attrs: {
14890
+ "color": "#ffffff",
14891
+ "size": "28px"
14892
+ }
14893
+ }) : _c('svg', {
14894
+ staticClass: "voice-mic-icon",
14895
+ attrs: {
14896
+ "viewBox": "0 0 1024 1024",
14897
+ "fill": "currentColor",
14898
+ "aria-hidden": "true"
14899
+ }
14900
+ }, [_c('path', {
14901
+ attrs: {
14902
+ "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"
14903
+ }
14904
+ }), _c('path', {
14905
+ attrs: {
14906
+ "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"
14907
+ }
14908
+ })])], 1), _c('div', {
14909
+ staticClass: "voice-status-text",
14910
+ class: {
14911
+ 'is-error': _vm.status === 'error'
14912
+ }
14913
+ }, [_vm._v(_vm._s(_vm.statusText))]), _c('canvas', {
14914
+ directives: [{
14915
+ name: "show",
14916
+ rawName: "v-show",
14917
+ value: _vm.status === 'recording',
14918
+ expression: "status === 'recording'"
14919
+ }],
14920
+ ref: "waveCanvas",
14921
+ staticClass: "voice-wave-canvas"
14922
+ }), _c('div', {
14923
+ directives: [{
14924
+ name: "show",
14925
+ rawName: "v-show",
14926
+ value: _vm.status === 'recording',
14927
+ expression: "status === 'recording'"
14928
+ }],
14929
+ staticClass: "voice-timer"
14930
+ }, [_vm._v(_vm._s(_vm.timerText))]), _c('van-field', {
14931
+ staticClass: "voice-result-field",
14932
+ attrs: {
14933
+ "type": "textarea",
14934
+ "rows": "3",
14935
+ "autosize": "",
14936
+ "readonly": _vm.status === 'recording' || _vm.status === 'processing',
14937
+ "placeholder": _vm.$tx('ecmapp.wflowform.voiceResultHolder', '识别结果将显示在这里,可修改后填入意见。')
14938
+ },
14939
+ model: {
14940
+ value: _vm.resultText,
14941
+ callback: function callback($$v) {
14942
+ _vm.resultText = $$v;
14943
+ },
14944
+ expression: "resultText"
14945
+ }
14946
+ })], 1), _c('div', {
14947
+ staticClass: "voice-popup-footer"
14948
+ }, [_c('van-button', {
14949
+ attrs: {
14950
+ "type": "default",
14951
+ "size": "small",
14952
+ "hairline": ""
14953
+ },
14954
+ on: {
14955
+ "click": function click($event) {
14956
+ _vm.dialogVisible = false;
14957
+ }
14958
+ }
14959
+ }, [_vm._v(_vm._s(_vm.$tx('ecmapp.pageBtns.cancel', '取消')))]), _c('van-button', {
14960
+ attrs: {
14961
+ "type": "info",
14962
+ "size": "small",
14963
+ "hairline": "",
14964
+ "disabled": !_vm.resultText || _vm.resultText.trim() === '' || _vm.status === 'recording' || _vm.status === 'processing'
14965
+ },
14966
+ on: {
14967
+ "click": _vm.confirmVoiceText
14968
+ }
14969
+ }, [_vm._v(_vm._s(_vm.$tx('ecmapp.wflowform.voiceFillOpinion', '填入意见')))])], 1)]);
14970
+ };
14971
+ var VoiceInputDialogvue_type_template_id_28732777_scoped_true_staticRenderFns = [];
14972
+
14973
+ ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
14974
+ /* harmony default export */ var VoiceInputDialogvue_type_script_lang_js = ({
14975
+ name: 'VoiceInputDialog',
14976
+ props: {
14977
+ visible: {
14978
+ type: Boolean,
14979
+ default: false
14980
+ }
14981
+ },
14982
+ data: function data() {
14983
+ return {
14984
+ i18npkg: 'ecmapp',
14985
+ moduleCode: 'wflowform',
14986
+ status: 'idle',
14987
+ // idle:待录音 recording:录音中 processing:识别中(仅后端模式) done:识别完成 error:出错
14988
+ errorText: '',
14989
+ resultText: '',
14990
+ finalText: '',
14991
+ // 浏览器模式已确认的识别文本
14992
+ seconds: 0,
14993
+ timer: null,
14994
+ recognition: null,
14995
+ // 浏览器语音识别实例
14996
+ mediaRecorder: null,
14997
+ // 后端模式录音实例
14998
+ stream: null,
14999
+ // 麦克风音频流
15000
+ audioChunks: [],
15001
+ audioContext: null,
15002
+ // 波形绘制音频上下文
15003
+ analyser: null,
15004
+ // 波形分析节点
15005
+ visualStream: null,
15006
+ // 浏览器模式下专供波形绘制的音频流
15007
+ waveRafId: null,
15008
+ recognizeStartAt: 0 // 识别启动时间戳,用于判断秒退(识别服务不可用)
15009
+ };
15010
+ },
15011
+ computed: {
15012
+ dialogVisible: {
15013
+ get: function get() {
15014
+ return this.visible;
15015
+ },
15016
+ set: function set(val) {
15017
+ this.$emit('update:visible', val);
15018
+ }
15019
+ },
15020
+ // window.voiceToWord为非空字符串且不为browser时,视为后端转写接口URL
15021
+ backendUrl: function backendUrl() {
15022
+ var voiceToWord = window.voiceToWord;
15023
+ return voiceToWord && typeof voiceToWord === 'string' && voiceToWord !== 'browser' ? voiceToWord : '';
15024
+ },
15025
+ statusText: function statusText() {
15026
+ switch (this.status) {
15027
+ case 'recording':
15028
+ return this.$tx('ecmapp.wflowform.voiceRecording', '正在聆听,请说话…');
15029
+ case 'processing':
15030
+ return this.$tx('ecmapp.wflowform.voiceProcessing', '识别中…');
15031
+ case 'done':
15032
+ return this.$tx('ecmapp.wflowform.voiceDone', '识别完成,可修改后填入。');
15033
+ case 'error':
15034
+ return this.errorText;
15035
+ default:
15036
+ return this.$tx('ecmapp.wflowform.voiceIdle', '点击麦克风开始说话');
15037
+ }
15038
+ },
15039
+ timerText: function timerText() {
15040
+ var min = Math.floor(this.seconds / 60);
15041
+ var sec = this.seconds % 60;
15042
+ return (min < 10 ? '0' + min : min) + ':' + (sec < 10 ? '0' + sec : sec);
15043
+ }
15044
+ },
15045
+ watch: {
15046
+ visible: function visible(val) {
15047
+ if (val) {
15048
+ this.resetState();
15049
+ this.preRequestPermission();
15050
+ }
15051
+ }
15052
+ },
15053
+ beforeDestroy: function beforeDestroy() {
15054
+ this.releaseResources();
15055
+ },
15056
+ methods: {
15057
+ resetState: function resetState() {
15058
+ this.status = 'idle';
15059
+ this.errorText = '';
15060
+ this.resultText = '';
15061
+ this.finalText = '';
15062
+ this.seconds = 0;
15063
+ this.audioChunks = [];
15064
+ },
15065
+ // 打开弹窗即预请求麦克风权限,被拒绝时显示引导文案
15066
+ preRequestPermission: function preRequestPermission() {
15067
+ var _this = this;
15068
+ if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
15069
+ navigator.mediaDevices.getUserMedia({
15070
+ audio: true
15071
+ }).then(function (stream) {
15072
+ stream.getTracks().forEach(function (track) {
15073
+ return track.stop();
15074
+ });
15075
+ }).catch(function () {
15076
+ _this.showPermissionError();
15077
+ });
15078
+ }
15079
+ },
15080
+ showPermissionError: function showPermissionError() {
15081
+ this.status = 'error';
15082
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNoPermission', '请在浏览器设置中允许使用麦克风后重试。');
15083
+ },
15084
+ // 手机浏览器/WebView常见:暴露了SpeechRecognition但识别服务不可达(如Google语音服务)
15085
+ showServiceUnavailableError: function showServiceUnavailableError() {
15086
+ this.status = 'error';
15087
+ this.errorText = this.$tx('ecmapp.wflowform.voiceServiceUnavailable', '当前浏览器无法连接语音识别服务。');
15088
+ },
15089
+ toggleRecord: function toggleRecord() {
15090
+ if (this.status === 'processing') return;
15091
+ if (this.status === 'recording') {
15092
+ this.stopRecord();
15093
+ } else {
15094
+ this.startRecord();
15095
+ }
15096
+ },
15097
+ startRecord: function startRecord() {
15098
+ this.resultText = '';
15099
+ this.finalText = '';
15100
+ if (this.backendUrl) {
15101
+ this.startBackendRecord();
15102
+ } else {
15103
+ this.startBrowserRecognition();
15104
+ }
15105
+ },
15106
+ stopRecord: function stopRecord() {
15107
+ this.stopTimer();
15108
+ if (this.recognition) {
15109
+ this.recognition.stop();
15110
+ }
15111
+ if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {
15112
+ this.mediaRecorder.stop();
15113
+ }
15114
+ },
15115
+ startTimer: function startTimer() {
15116
+ var _this2 = this;
15117
+ this.seconds = 0;
15118
+ this.timer = setInterval(function () {
15119
+ _this2.seconds++;
15120
+ }, 1000);
15121
+ },
15122
+ stopTimer: function stopTimer() {
15123
+ if (this.timer) {
15124
+ clearInterval(this.timer);
15125
+ this.timer = null;
15126
+ }
15127
+ },
15128
+ // 浏览器模式:Web Speech API直转文字,中间结果实时上屏
15129
+ startBrowserRecognition: function startBrowserRecognition() {
15130
+ var _this3 = this;
15131
+ var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
15132
+ if (!SpeechRecognition) {
15133
+ this.status = 'error';
15134
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNotSupport', '当前浏览器不支持语音识别。');
15135
+ return;
15136
+ }
15137
+ var recognition = new SpeechRecognition();
15138
+ recognition.lang = 'zh-CN';
15139
+ recognition.continuous = true;
15140
+ recognition.interimResults = true;
15141
+ recognition.onstart = function () {
15142
+ _this3.status = 'recording';
15143
+ _this3.startTimer();
15144
+ _this3.startVisualStream();
15145
+ };
15146
+ recognition.onresult = function (event) {
15147
+ var interimText = '';
15148
+ for (var i = event.resultIndex; i < event.results.length; i++) {
15149
+ if (event.results[i].isFinal) {
15150
+ _this3.finalText += event.results[i][0].transcript;
15151
+ } else {
15152
+ interimText += event.results[i][0].transcript;
15153
+ }
15154
+ }
15155
+ _this3.resultText = _this3.finalText + interimText;
15156
+ };
15157
+ recognition.onerror = function (event) {
15158
+ _this3.stopTimer();
15159
+ _this3.stopWaveform();
15160
+ if (event.error === 'not-allowed' || event.error === 'service-not-allowed') {
15161
+ _this3.showPermissionError();
15162
+ } else if (event.error === 'network') {
15163
+ _this3.showServiceUnavailableError();
15164
+ } else if (event.error === 'no-speech') {
15165
+ _this3.status = 'error';
15166
+ _this3.errorText = _this3.$tx('ecmapp.wflowform.voiceNoSpeech', '未检测到语音,请重试。');
15167
+ } else if (event.error !== 'aborted') {
15168
+ _this3.status = 'error';
15169
+ _this3.errorText = _this3.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15170
+ }
15171
+ };
15172
+ recognition.onend = function () {
15173
+ _this3.stopTimer();
15174
+ _this3.stopWaveform();
15175
+ _this3.recognition = null;
15176
+ if (_this3.status === 'recording') {
15177
+ _this3.resultText = _this3.finalText;
15178
+ if (_this3.resultText.trim() !== '') {
15179
+ _this3.status = 'done';
15180
+ } else if (Date.now() - _this3.recognizeStartAt < 1500) {
15181
+ // 启动后秒退且无任何结果,判定为识别服务不可用
15182
+ _this3.showServiceUnavailableError();
15183
+ } else {
15184
+ _this3.status = 'idle';
15185
+ }
15186
+ }
15187
+ };
15188
+ this.recognition = recognition;
15189
+ this.recognizeStartAt = Date.now();
15190
+ recognition.start();
15191
+ },
15192
+ // 后端模式:录音→上传→转文字
15193
+ startBackendRecord: function startBackendRecord() {
15194
+ var _this4 = this;
15195
+ if (!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) {
15196
+ this.status = 'error';
15197
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNotSupport', '当前浏览器不支持语音识别。');
15198
+ return;
15199
+ }
15200
+ navigator.mediaDevices.getUserMedia({
15201
+ audio: true
15202
+ }).then(function (stream) {
15203
+ _this4.stream = stream;
15204
+ _this4.audioChunks = [];
15205
+ var mimeType = window.MediaRecorder && MediaRecorder.isTypeSupported('audio/webm;codecs=opus') ? 'audio/webm;codecs=opus' : '';
15206
+ var mediaRecorder = mimeType ? new MediaRecorder(stream, {
15207
+ mimeType: mimeType
15208
+ }) : new MediaRecorder(stream);
15209
+ mediaRecorder.ondataavailable = function (event) {
15210
+ if (event.data && event.data.size > 0) {
15211
+ _this4.audioChunks.push(event.data);
15212
+ }
15213
+ };
15214
+ mediaRecorder.onstart = function () {
15215
+ _this4.status = 'recording';
15216
+ _this4.startTimer();
15217
+ _this4.startWaveform(stream);
15218
+ };
15219
+ mediaRecorder.onstop = function () {
15220
+ _this4.stopTimer();
15221
+ _this4.stopWaveform();
15222
+ _this4.releaseStream();
15223
+ _this4.mediaRecorder = null;
15224
+ // 弹窗已关闭(取消录音)则不再上传
15225
+ if (_this4.visible && _this4.audioChunks.length > 0) {
15226
+ _this4.uploadVoice();
15227
+ }
15228
+ };
15229
+ _this4.mediaRecorder = mediaRecorder;
15230
+ mediaRecorder.start();
15231
+ }).catch(function () {
15232
+ _this4.showPermissionError();
15233
+ });
15234
+ },
15235
+ uploadVoice: function uploadVoice() {
15236
+ var _this5 = this;
15237
+ this.status = 'processing';
15238
+ var voiceBlob = new Blob(this.audioChunks, {
15239
+ type: this.audioChunks[0].type || 'audio/webm'
15240
+ });
15241
+ var formData = new FormData();
15242
+ formData.append('voiceFile', voiceBlob, 'voice.webm');
15243
+ formData.append('format', 'webm');
15244
+ formData.append('lang', 'zh-CN');
15245
+ this.$http({
15246
+ method: 'POST',
15247
+ url: this.backendUrl,
15248
+ headers: {
15249
+ 'Content-Type': 'multipart/form-data'
15250
+ },
15251
+ data: formData
15252
+ }).then(function (res) {
15253
+ if (res.code === 'success') {
15254
+ _this5.resultText = res.body && res.body.text || '';
15255
+ _this5.status = _this5.resultText.trim() !== '' ? 'done' : 'error';
15256
+ if (_this5.status === 'error') {
15257
+ _this5.errorText = _this5.$tx('ecmapp.wflowform.voiceNoSpeech', '未检测到语音,请重试。');
15258
+ }
15259
+ } else {
15260
+ _this5.status = 'error';
15261
+ _this5.errorText = res.message || _this5.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15262
+ }
15263
+ }).catch(function () {
15264
+ _this5.status = 'error';
15265
+ _this5.errorText = _this5.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15266
+ });
15267
+ },
15268
+ releaseStream: function releaseStream() {
15269
+ if (this.stream) {
15270
+ this.stream.getTracks().forEach(function (track) {
15271
+ return track.stop();
15272
+ });
15273
+ this.stream = null;
15274
+ }
15275
+ },
15276
+ // 浏览器模式下SpeechRecognition不暴露音频流,单独取一路流用于波形绘制
15277
+ startVisualStream: function startVisualStream() {
15278
+ var _this6 = this;
15279
+ if (!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) return;
15280
+ navigator.mediaDevices.getUserMedia({
15281
+ audio: true
15282
+ }).then(function (stream) {
15283
+ // 取流回来时录音可能已结束
15284
+ if (_this6.status !== 'recording') {
15285
+ stream.getTracks().forEach(function (track) {
15286
+ return track.stop();
15287
+ });
15288
+ return;
15289
+ }
15290
+ _this6.visualStream = stream;
15291
+ _this6.startWaveform(stream);
15292
+ }).catch(function () {});
15293
+ },
15294
+ // 用AnalyserNode实时绘制录音波形柱状图
15295
+ startWaveform: function startWaveform(stream) {
15296
+ var _this7 = this;
15297
+ var AudioContextClass = window.AudioContext || window.webkitAudioContext;
15298
+ var canvas = this.$refs.waveCanvas;
15299
+ if (!AudioContextClass || !canvas) return;
15300
+ var audioContext = new AudioContextClass();
15301
+ var analyser = audioContext.createAnalyser();
15302
+ analyser.fftSize = 128;
15303
+ audioContext.createMediaStreamSource(stream).connect(analyser);
15304
+ this.audioContext = audioContext;
15305
+ this.analyser = analyser;
15306
+ var dpr = window.devicePixelRatio || 1;
15307
+ canvas.width = canvas.clientWidth * dpr;
15308
+ canvas.height = canvas.clientHeight * dpr;
15309
+ var ctx = canvas.getContext('2d');
15310
+ var dataArray = new Uint8Array(analyser.frequencyBinCount);
15311
+ var barCount = 32;
15312
+ var gap = 2 * dpr;
15313
+ var barWidth = (canvas.width - gap * (barCount - 1)) / barCount;
15314
+ var centerY = canvas.height / 2;
15315
+ var draw = function draw() {
15316
+ if (!_this7.analyser) return;
15317
+ _this7.waveRafId = requestAnimationFrame(draw);
15318
+ _this7.analyser.getByteFrequencyData(dataArray);
15319
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
15320
+ ctx.fillStyle = '#1989fa';
15321
+ for (var i = 0; i < barCount; i++) {
15322
+ var value = dataArray[Math.floor(i * dataArray.length / barCount)] / 255;
15323
+ var barHeight = Math.max(2 * dpr, value * canvas.height);
15324
+ var x = i * (barWidth + gap);
15325
+ ctx.fillRect(x, centerY - barHeight / 2, barWidth, barHeight);
15326
+ }
15327
+ };
15328
+ draw();
15329
+ },
15330
+ stopWaveform: function stopWaveform() {
15331
+ if (this.waveRafId) {
15332
+ cancelAnimationFrame(this.waveRafId);
15333
+ this.waveRafId = null;
15334
+ }
15335
+ if (this.audioContext) {
15336
+ this.audioContext.close().catch(function () {});
15337
+ this.audioContext = null;
15338
+ }
15339
+ this.analyser = null;
15340
+ if (this.visualStream) {
15341
+ this.visualStream.getTracks().forEach(function (track) {
15342
+ return track.stop();
15343
+ });
15344
+ this.visualStream = null;
15345
+ }
15346
+ },
15347
+ // 关闭/取消时释放麦克风等资源
15348
+ releaseResources: function releaseResources() {
15349
+ this.stopTimer();
15350
+ this.stopWaveform();
15351
+ if (this.recognition) {
15352
+ this.recognition.abort();
15353
+ this.recognition = null;
15354
+ }
15355
+ if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {
15356
+ this.mediaRecorder.stop();
15357
+ }
15358
+ this.mediaRecorder = null;
15359
+ this.releaseStream();
15360
+ },
15361
+ onPopupClosed: function onPopupClosed() {
15362
+ this.releaseResources();
15363
+ },
15364
+ confirmVoiceText: function confirmVoiceText() {
15365
+ var text = this.resultText.trim();
15366
+ if (text === '') return;
15367
+ this.$emit('confirm', text);
15368
+ this.dialogVisible = false;
15369
+ }
15370
+ }
15371
+ });
15372
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=script&lang=js
15373
+ /* harmony default export */ var src_VoiceInputDialogvue_type_script_lang_js = (VoiceInputDialogvue_type_script_lang_js);
15374
+ // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-65.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-65.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-65.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-65.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-65.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
15375
+ var VoiceInputDialogvue_type_style_index_0_id_28732777_prod_scoped_true_lang_scss = __webpack_require__(80);
15376
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=style&index=0&id=28732777&prod&scoped=true&lang=scss
15377
+
15378
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue
15379
+
15380
+
15381
+
15382
+ ;
15383
+
15384
+
15385
+ /* normalize component */
15386
+
15387
+ var VoiceInputDialog_component = (0,componentNormalizer/* default */.A)(
15388
+ src_VoiceInputDialogvue_type_script_lang_js,
15389
+ VoiceInputDialogvue_type_template_id_28732777_scoped_true_render,
15390
+ VoiceInputDialogvue_type_template_id_28732777_scoped_true_staticRenderFns,
15391
+ false,
15392
+ null,
15393
+ "28732777",
15394
+ null
15395
+
15396
+ )
15397
+
15398
+ /* harmony default export */ var VoiceInputDialog = (VoiceInputDialog_component.exports);
14811
15399
  ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-83.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
14812
15400
  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); }
14813
15401
  var moment = __webpack_require__(5093);
14814
15402
 
15403
+
14815
15404
  /* harmony default export */ var SubmitHandlevue_type_script_lang_js = ({
14816
15405
  name: 'SubmitHandle',
14817
15406
  components: {
14818
- WfTaskNode: WfTaskNode
15407
+ WfTaskNode: WfTaskNode,
15408
+ VoiceInputDialog: VoiceInputDialog
14819
15409
  },
14820
15410
  props: {
14821
15411
  curTN: {
@@ -14949,7 +15539,11 @@ var moment = __webpack_require__(5093);
14949
15539
  defaultNumber: 8,
14950
15540
  // 超出默认展示两行(个数)
14951
15541
  viewCommentsNum: 8,
14952
- selectedUsersCount: {} //节点已选择人数
15542
+ selectedUsersCount: {},
15543
+ //节点已选择人数
15544
+ voiceDialogVisible: false,
15545
+ // 语音输入弹窗
15546
+ voiceInputEnabled: false // 当前环境是否支持语音输入
14953
15547
  };
14954
15548
  },
14955
15549
  computed: {
@@ -14992,6 +15586,7 @@ var moment = __webpack_require__(5093);
14992
15586
  },
14993
15587
  created: function created() {
14994
15588
  // this.setMargin()
15589
+ this.initVoiceInputEnabled();
14995
15590
  this.$bus.on('initSubmitHandle', this.initSubmitHandle);
14996
15591
  },
14997
15592
  beforeDestroy: function beforeDestroy() {
@@ -15018,6 +15613,26 @@ var moment = __webpack_require__(5093);
15018
15613
  }
15019
15614
  },
15020
15615
  methods: {
15616
+ // 检测语音输入按钮可用性:未配置window.voiceToWord时需https/localhost安全上下文且浏览器支持Web Speech API,否则不显示按钮
15617
+ initVoiceInputEnabled: function initVoiceInputEnabled() {
15618
+ var voiceToWord = window.voiceToWord;
15619
+ if (voiceToWord && typeof voiceToWord === 'string' && voiceToWord !== 'browser') {
15620
+ // 后端接口转文字:需getUserMedia录音(同样仅安全上下文下可用)
15621
+ this.voiceInputEnabled = !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
15622
+ } else {
15623
+ // 浏览器直转文字:需安全上下文且支持SpeechRecognition
15624
+ this.voiceInputEnabled = window.isSecureContext === true && ('webkitSpeechRecognition' in window || 'SpeechRecognition' in window);
15625
+ }
15626
+ },
15627
+ openVoiceInput: function openVoiceInput() {
15628
+ this.voiceDialogVisible = true;
15629
+ },
15630
+ onVoiceConfirm: function onVoiceConfirm(text) {
15631
+ if (!text) return;
15632
+ var curUserIdea = this.submitHandle.curUserIdea;
15633
+ this.$set(this.submitHandle, 'curUserIdea', curUserIdea && curUserIdea.trim() !== '' ? curUserIdea + ' ' + text : text);
15634
+ this.$forceUpdate();
15635
+ },
15021
15636
  // 计算边距
15022
15637
  setMargin: function setMargin() {
15023
15638
  var columnsNum = Math.floor((screen.width - 20) / 93); // 列数
@@ -15802,9 +16417,9 @@ var moment = __webpack_require__(5093);
15802
16417
  });
15803
16418
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=script&lang=js
15804
16419
  /* harmony default export */ var src_SubmitHandlevue_type_script_lang_js = (SubmitHandlevue_type_script_lang_js);
15805
- // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-65.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-65.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-65.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-65.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-65.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
15806
- var SubmitHandlevue_type_style_index_0_id_6451f4d6_prod_scoped_true_lang_scss = __webpack_require__(3681);
15807
- ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=style&index=0&id=6451f4d6&prod&scoped=true&lang=scss
16420
+ // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-65.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-65.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-65.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-65.use[3]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-65.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
16421
+ var SubmitHandlevue_type_style_index_0_id_44733f4f_prod_scoped_true_lang_scss = __webpack_require__(9500);
16422
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=style&index=0&id=44733f4f&prod&scoped=true&lang=scss
15808
16423
 
15809
16424
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue
15810
16425
 
@@ -15817,11 +16432,11 @@ var SubmitHandlevue_type_style_index_0_id_6451f4d6_prod_scoped_true_lang_scss =
15817
16432
 
15818
16433
  var SubmitHandle_component = (0,componentNormalizer/* default */.A)(
15819
16434
  src_SubmitHandlevue_type_script_lang_js,
15820
- SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render,
15821
- SubmitHandlevue_type_template_id_6451f4d6_scoped_true_staticRenderFns,
16435
+ SubmitHandlevue_type_template_id_44733f4f_scoped_true_render,
16436
+ SubmitHandlevue_type_template_id_44733f4f_scoped_true_staticRenderFns,
15822
16437
  false,
15823
16438
  null,
15824
- "6451f4d6",
16439
+ "44733f4f",
15825
16440
  null
15826
16441
 
15827
16442
  )
@@ -22261,7 +22876,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".submit-dialog-container[data-v-9c230b
22261
22876
 
22262
22877
  /***/ }),
22263
22878
 
22264
- /***/ 3986:
22879
+ /***/ 7103:
22265
22880
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
22266
22881
 
22267
22882
  "use strict";
@@ -22280,7 +22895,28 @@ var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require
22280
22895
  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()));
22281
22896
  var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);
22282
22897
  // Module
22283
- ___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%}", ""]);
22898
+ ___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%}", ""]);
22899
+ // Exports
22900
+ /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
22901
+
22902
+
22903
+ /***/ }),
22904
+
22905
+ /***/ 3355:
22906
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
22907
+
22908
+ "use strict";
22909
+ __webpack_require__.r(__webpack_exports__);
22910
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1601);
22911
+ /* 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__);
22912
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6314);
22913
+ /* 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__);
22914
+ // Imports
22915
+
22916
+
22917
+ 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()));
22918
+ // Module
22919
+ ___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)}}", ""]);
22284
22920
  // Exports
22285
22921
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
22286
22922
 
@@ -49912,19 +50548,35 @@ var update = add("72ae29a9", content, true, {"sourceMap":false,"shadowMode":fals
49912
50548
 
49913
50549
  /***/ }),
49914
50550
 
49915
- /***/ 3681:
50551
+ /***/ 9500:
50552
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
50553
+
50554
+ // style-loader: Adds some css to the DOM by adding a <style> tag
50555
+
50556
+ // load the styles
50557
+ var content = __webpack_require__(7103);
50558
+ if(content.__esModule) content = content.default;
50559
+ if(typeof content === 'string') content = [[module.id, content, '']];
50560
+ if(content.locals) module.exports = content.locals;
50561
+ // add the styles to the DOM
50562
+ var add = (__webpack_require__(9548)/* ["default"] */ .A)
50563
+ var update = add("4f4e2226", content, true, {"sourceMap":false,"shadowMode":false});
50564
+
50565
+ /***/ }),
50566
+
50567
+ /***/ 80:
49916
50568
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
49917
50569
 
49918
50570
  // style-loader: Adds some css to the DOM by adding a <style> tag
49919
50571
 
49920
50572
  // load the styles
49921
- var content = __webpack_require__(3986);
50573
+ var content = __webpack_require__(3355);
49922
50574
  if(content.__esModule) content = content.default;
49923
50575
  if(typeof content === 'string') content = [[module.id, content, '']];
49924
50576
  if(content.locals) module.exports = content.locals;
49925
50577
  // add the styles to the DOM
49926
50578
  var add = (__webpack_require__(9548)/* ["default"] */ .A)
49927
- var update = add("651bfa7f", content, true, {"sourceMap":false,"shadowMode":false});
50579
+ var update = add("567ef468", content, true, {"sourceMap":false,"shadowMode":false});
49928
50580
 
49929
50581
  /***/ }),
49930
50582
 
@@ -72303,39 +72955,39 @@ var asyncComponents = [
72303
72955
  }],
72304
72956
  // ========== ecmapp/Wflowform 工作流表单子组件 → chunk: m-wflow-form ==========
72305
72957
  ['Attachment', function () {
72306
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72958
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866)).then(function (m) {
72307
72959
  return m.Attachment;
72308
72960
  });
72309
72961
  }], ['BodyFile', function () {
72310
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72962
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866)).then(function (m) {
72311
72963
  return m.BodyFile;
72312
72964
  });
72313
72965
  }], ['HandleIdea', function () {
72314
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72966
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866)).then(function (m) {
72315
72967
  return m.HandleIdea;
72316
72968
  });
72317
72969
  }], ['SelectOuterDeputy', function () {
72318
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72970
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866)).then(function (m) {
72319
72971
  return m.SelectOuterDeputy;
72320
72972
  });
72321
72973
  }], ['SubmitHandle', function () {
72322
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72974
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866)).then(function (m) {
72323
72975
  return m.SubmitHandle;
72324
72976
  });
72325
72977
  }], ['SubmitDialog', function () {
72326
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72978
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866)).then(function (m) {
72327
72979
  return m.SubmitDialog;
72328
72980
  });
72329
72981
  }], ['ShortcutProcessing', function () {
72330
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72982
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866)).then(function (m) {
72331
72983
  return m.ShortcutProcessing;
72332
72984
  });
72333
72985
  }], ['WfNodelogList', function () {
72334
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72986
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866)).then(function (m) {
72335
72987
  return m.WfNodelogList;
72336
72988
  });
72337
72989
  }], ['WriteToReadIdea', function () {
72338
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72990
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866)).then(function (m) {
72339
72991
  return m.WriteToReadIdea;
72340
72992
  });
72341
72993
  }]];
@@ -72388,7 +73040,7 @@ var WfengineModule = function WfengineModule() {
72388
73040
  return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6322));
72389
73041
  };
72390
73042
  var WflowformModule = function WflowformModule() {
72391
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630));
73043
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8866));
72392
73044
  };
72393
73045
 
72394
73046
  // ---------- 重型功能(PDF/富文本,仅特定页面使用) ----------