ecinc-cloud-mappaio 9.7.32 → 9.7.33

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
+ /***/ 4558:
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,556 @@ 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=574b941f&scoped=true
14844
+ var VoiceInputDialogvue_type_template_id_574b941f_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_574b941f_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
+ };
15009
+ },
15010
+ computed: {
15011
+ dialogVisible: {
15012
+ get: function get() {
15013
+ return this.visible;
15014
+ },
15015
+ set: function set(val) {
15016
+ this.$emit('update:visible', val);
15017
+ }
15018
+ },
15019
+ // window.voiceToWord为非空字符串且不为browser时,视为后端转写接口URL
15020
+ backendUrl: function backendUrl() {
15021
+ var voiceToWord = window.voiceToWord;
15022
+ return voiceToWord && typeof voiceToWord === 'string' && voiceToWord !== 'browser' ? voiceToWord : '';
15023
+ },
15024
+ statusText: function statusText() {
15025
+ switch (this.status) {
15026
+ case 'recording':
15027
+ return this.$tx('ecmapp.wflowform.voiceRecording', '正在聆听,请说话…');
15028
+ case 'processing':
15029
+ return this.$tx('ecmapp.wflowform.voiceProcessing', '识别中…');
15030
+ case 'done':
15031
+ return this.$tx('ecmapp.wflowform.voiceDone', '识别完成,可修改后填入。');
15032
+ case 'error':
15033
+ return this.errorText;
15034
+ default:
15035
+ return this.$tx('ecmapp.wflowform.voiceIdle', '点击麦克风开始说话');
15036
+ }
15037
+ },
15038
+ timerText: function timerText() {
15039
+ var min = Math.floor(this.seconds / 60);
15040
+ var sec = this.seconds % 60;
15041
+ return (min < 10 ? '0' + min : min) + ':' + (sec < 10 ? '0' + sec : sec);
15042
+ }
15043
+ },
15044
+ watch: {
15045
+ visible: function visible(val) {
15046
+ if (val) {
15047
+ this.resetState();
15048
+ this.preRequestPermission();
15049
+ }
15050
+ }
15051
+ },
15052
+ beforeDestroy: function beforeDestroy() {
15053
+ this.releaseResources();
15054
+ },
15055
+ methods: {
15056
+ resetState: function resetState() {
15057
+ this.status = 'idle';
15058
+ this.errorText = '';
15059
+ this.resultText = '';
15060
+ this.finalText = '';
15061
+ this.seconds = 0;
15062
+ this.audioChunks = [];
15063
+ },
15064
+ // 打开弹窗即预请求麦克风权限,被拒绝时显示引导文案
15065
+ preRequestPermission: function preRequestPermission() {
15066
+ var _this = this;
15067
+ if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
15068
+ navigator.mediaDevices.getUserMedia({
15069
+ audio: true
15070
+ }).then(function (stream) {
15071
+ stream.getTracks().forEach(function (track) {
15072
+ return track.stop();
15073
+ });
15074
+ }).catch(function () {
15075
+ _this.showPermissionError();
15076
+ });
15077
+ }
15078
+ },
15079
+ showPermissionError: function showPermissionError() {
15080
+ this.status = 'error';
15081
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNoPermission', '请在浏览器设置中允许使用麦克风后重试。');
15082
+ },
15083
+ toggleRecord: function toggleRecord() {
15084
+ if (this.status === 'processing') return;
15085
+ if (this.status === 'recording') {
15086
+ this.stopRecord();
15087
+ } else {
15088
+ this.startRecord();
15089
+ }
15090
+ },
15091
+ startRecord: function startRecord() {
15092
+ this.resultText = '';
15093
+ this.finalText = '';
15094
+ if (this.backendUrl) {
15095
+ this.startBackendRecord();
15096
+ } else {
15097
+ this.startBrowserRecognition();
15098
+ }
15099
+ },
15100
+ stopRecord: function stopRecord() {
15101
+ this.stopTimer();
15102
+ if (this.recognition) {
15103
+ this.recognition.stop();
15104
+ }
15105
+ if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {
15106
+ this.mediaRecorder.stop();
15107
+ }
15108
+ },
15109
+ startTimer: function startTimer() {
15110
+ var _this2 = this;
15111
+ this.seconds = 0;
15112
+ this.timer = setInterval(function () {
15113
+ _this2.seconds++;
15114
+ }, 1000);
15115
+ },
15116
+ stopTimer: function stopTimer() {
15117
+ if (this.timer) {
15118
+ clearInterval(this.timer);
15119
+ this.timer = null;
15120
+ }
15121
+ },
15122
+ // 浏览器模式:Web Speech API直转文字,中间结果实时上屏
15123
+ startBrowserRecognition: function startBrowserRecognition() {
15124
+ var _this3 = this;
15125
+ var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
15126
+ if (!SpeechRecognition) {
15127
+ this.status = 'error';
15128
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNotSupport', '当前浏览器不支持语音识别。');
15129
+ return;
15130
+ }
15131
+ var recognition = new SpeechRecognition();
15132
+ recognition.lang = 'zh-CN';
15133
+ recognition.continuous = true;
15134
+ recognition.interimResults = true;
15135
+ recognition.onstart = function () {
15136
+ _this3.status = 'recording';
15137
+ _this3.startTimer();
15138
+ _this3.startVisualStream();
15139
+ };
15140
+ recognition.onresult = function (event) {
15141
+ var interimText = '';
15142
+ for (var i = event.resultIndex; i < event.results.length; i++) {
15143
+ if (event.results[i].isFinal) {
15144
+ _this3.finalText += event.results[i][0].transcript;
15145
+ } else {
15146
+ interimText += event.results[i][0].transcript;
15147
+ }
15148
+ }
15149
+ _this3.resultText = _this3.finalText + interimText;
15150
+ };
15151
+ recognition.onerror = function (event) {
15152
+ _this3.stopTimer();
15153
+ _this3.stopWaveform();
15154
+ if (event.error === 'not-allowed' || event.error === 'service-not-allowed') {
15155
+ _this3.showPermissionError();
15156
+ } else if (event.error === 'no-speech') {
15157
+ _this3.status = 'error';
15158
+ _this3.errorText = _this3.$tx('ecmapp.wflowform.voiceNoSpeech', '未检测到语音,请重试。');
15159
+ } else if (event.error !== 'aborted') {
15160
+ _this3.status = 'error';
15161
+ _this3.errorText = _this3.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15162
+ }
15163
+ };
15164
+ recognition.onend = function () {
15165
+ _this3.stopTimer();
15166
+ _this3.stopWaveform();
15167
+ _this3.recognition = null;
15168
+ if (_this3.status === 'recording') {
15169
+ _this3.resultText = _this3.finalText;
15170
+ _this3.status = _this3.resultText.trim() !== '' ? 'done' : 'idle';
15171
+ }
15172
+ };
15173
+ this.recognition = recognition;
15174
+ recognition.start();
15175
+ },
15176
+ // 后端模式:录音→上传→转文字
15177
+ startBackendRecord: function startBackendRecord() {
15178
+ var _this4 = this;
15179
+ if (!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) {
15180
+ this.status = 'error';
15181
+ this.errorText = this.$tx('ecmapp.wflowform.voiceNotSupport', '当前浏览器不支持语音识别。');
15182
+ return;
15183
+ }
15184
+ navigator.mediaDevices.getUserMedia({
15185
+ audio: true
15186
+ }).then(function (stream) {
15187
+ _this4.stream = stream;
15188
+ _this4.audioChunks = [];
15189
+ var mimeType = window.MediaRecorder && MediaRecorder.isTypeSupported('audio/webm;codecs=opus') ? 'audio/webm;codecs=opus' : '';
15190
+ var mediaRecorder = mimeType ? new MediaRecorder(stream, {
15191
+ mimeType: mimeType
15192
+ }) : new MediaRecorder(stream);
15193
+ mediaRecorder.ondataavailable = function (event) {
15194
+ if (event.data && event.data.size > 0) {
15195
+ _this4.audioChunks.push(event.data);
15196
+ }
15197
+ };
15198
+ mediaRecorder.onstart = function () {
15199
+ _this4.status = 'recording';
15200
+ _this4.startTimer();
15201
+ _this4.startWaveform(stream);
15202
+ };
15203
+ mediaRecorder.onstop = function () {
15204
+ _this4.stopTimer();
15205
+ _this4.stopWaveform();
15206
+ _this4.releaseStream();
15207
+ _this4.mediaRecorder = null;
15208
+ // 弹窗已关闭(取消录音)则不再上传
15209
+ if (_this4.visible && _this4.audioChunks.length > 0) {
15210
+ _this4.uploadVoice();
15211
+ }
15212
+ };
15213
+ _this4.mediaRecorder = mediaRecorder;
15214
+ mediaRecorder.start();
15215
+ }).catch(function () {
15216
+ _this4.showPermissionError();
15217
+ });
15218
+ },
15219
+ uploadVoice: function uploadVoice() {
15220
+ var _this5 = this;
15221
+ this.status = 'processing';
15222
+ var voiceBlob = new Blob(this.audioChunks, {
15223
+ type: this.audioChunks[0].type || 'audio/webm'
15224
+ });
15225
+ var formData = new FormData();
15226
+ formData.append('voiceFile', voiceBlob, 'voice.webm');
15227
+ formData.append('format', 'webm');
15228
+ formData.append('lang', 'zh-CN');
15229
+ this.$http({
15230
+ method: 'POST',
15231
+ url: this.backendUrl,
15232
+ headers: {
15233
+ 'Content-Type': 'multipart/form-data'
15234
+ },
15235
+ data: formData
15236
+ }).then(function (res) {
15237
+ if (res.code === 'success') {
15238
+ _this5.resultText = res.body && res.body.text || '';
15239
+ _this5.status = _this5.resultText.trim() !== '' ? 'done' : 'error';
15240
+ if (_this5.status === 'error') {
15241
+ _this5.errorText = _this5.$tx('ecmapp.wflowform.voiceNoSpeech', '未检测到语音,请重试。');
15242
+ }
15243
+ } else {
15244
+ _this5.status = 'error';
15245
+ _this5.errorText = res.message || _this5.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15246
+ }
15247
+ }).catch(function () {
15248
+ _this5.status = 'error';
15249
+ _this5.errorText = _this5.$tx('ecmapp.wflowform.voiceRecognizeFail', '语音识别失败,请重试。');
15250
+ });
15251
+ },
15252
+ releaseStream: function releaseStream() {
15253
+ if (this.stream) {
15254
+ this.stream.getTracks().forEach(function (track) {
15255
+ return track.stop();
15256
+ });
15257
+ this.stream = null;
15258
+ }
15259
+ },
15260
+ // 浏览器模式下SpeechRecognition不暴露音频流,单独取一路流用于波形绘制
15261
+ startVisualStream: function startVisualStream() {
15262
+ var _this6 = this;
15263
+ if (!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) return;
15264
+ navigator.mediaDevices.getUserMedia({
15265
+ audio: true
15266
+ }).then(function (stream) {
15267
+ // 取流回来时录音可能已结束
15268
+ if (_this6.status !== 'recording') {
15269
+ stream.getTracks().forEach(function (track) {
15270
+ return track.stop();
15271
+ });
15272
+ return;
15273
+ }
15274
+ _this6.visualStream = stream;
15275
+ _this6.startWaveform(stream);
15276
+ }).catch(function () {});
15277
+ },
15278
+ // 用AnalyserNode实时绘制录音波形柱状图
15279
+ startWaveform: function startWaveform(stream) {
15280
+ var _this7 = this;
15281
+ var AudioContextClass = window.AudioContext || window.webkitAudioContext;
15282
+ var canvas = this.$refs.waveCanvas;
15283
+ if (!AudioContextClass || !canvas) return;
15284
+ var audioContext = new AudioContextClass();
15285
+ var analyser = audioContext.createAnalyser();
15286
+ analyser.fftSize = 128;
15287
+ audioContext.createMediaStreamSource(stream).connect(analyser);
15288
+ this.audioContext = audioContext;
15289
+ this.analyser = analyser;
15290
+ var dpr = window.devicePixelRatio || 1;
15291
+ canvas.width = canvas.clientWidth * dpr;
15292
+ canvas.height = canvas.clientHeight * dpr;
15293
+ var ctx = canvas.getContext('2d');
15294
+ var dataArray = new Uint8Array(analyser.frequencyBinCount);
15295
+ var barCount = 32;
15296
+ var gap = 2 * dpr;
15297
+ var barWidth = (canvas.width - gap * (barCount - 1)) / barCount;
15298
+ var centerY = canvas.height / 2;
15299
+ var draw = function draw() {
15300
+ if (!_this7.analyser) return;
15301
+ _this7.waveRafId = requestAnimationFrame(draw);
15302
+ _this7.analyser.getByteFrequencyData(dataArray);
15303
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
15304
+ ctx.fillStyle = '#1989fa';
15305
+ for (var i = 0; i < barCount; i++) {
15306
+ var value = dataArray[Math.floor(i * dataArray.length / barCount)] / 255;
15307
+ var barHeight = Math.max(2 * dpr, value * canvas.height);
15308
+ var x = i * (barWidth + gap);
15309
+ ctx.fillRect(x, centerY - barHeight / 2, barWidth, barHeight);
15310
+ }
15311
+ };
15312
+ draw();
15313
+ },
15314
+ stopWaveform: function stopWaveform() {
15315
+ if (this.waveRafId) {
15316
+ cancelAnimationFrame(this.waveRafId);
15317
+ this.waveRafId = null;
15318
+ }
15319
+ if (this.audioContext) {
15320
+ this.audioContext.close().catch(function () {});
15321
+ this.audioContext = null;
15322
+ }
15323
+ this.analyser = null;
15324
+ if (this.visualStream) {
15325
+ this.visualStream.getTracks().forEach(function (track) {
15326
+ return track.stop();
15327
+ });
15328
+ this.visualStream = null;
15329
+ }
15330
+ },
15331
+ // 关闭/取消时释放麦克风等资源
15332
+ releaseResources: function releaseResources() {
15333
+ this.stopTimer();
15334
+ this.stopWaveform();
15335
+ if (this.recognition) {
15336
+ this.recognition.abort();
15337
+ this.recognition = null;
15338
+ }
15339
+ if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {
15340
+ this.mediaRecorder.stop();
15341
+ }
15342
+ this.mediaRecorder = null;
15343
+ this.releaseStream();
15344
+ },
15345
+ onPopupClosed: function onPopupClosed() {
15346
+ this.releaseResources();
15347
+ },
15348
+ confirmVoiceText: function confirmVoiceText() {
15349
+ var text = this.resultText.trim();
15350
+ if (text === '') return;
15351
+ this.$emit('confirm', text);
15352
+ this.dialogVisible = false;
15353
+ }
15354
+ }
15355
+ });
15356
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=script&lang=js
15357
+ /* harmony default export */ var src_VoiceInputDialogvue_type_script_lang_js = (VoiceInputDialogvue_type_script_lang_js);
15358
+ // 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=574b941f&prod&scoped=true&lang=scss
15359
+ var VoiceInputDialogvue_type_style_index_0_id_574b941f_prod_scoped_true_lang_scss = __webpack_require__(273);
15360
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue?vue&type=style&index=0&id=574b941f&prod&scoped=true&lang=scss
15361
+
15362
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/VoiceInputDialog.vue
15363
+
15364
+
15365
+
15366
+ ;
15367
+
15368
+
15369
+ /* normalize component */
15370
+
15371
+ var VoiceInputDialog_component = (0,componentNormalizer/* default */.A)(
15372
+ src_VoiceInputDialogvue_type_script_lang_js,
15373
+ VoiceInputDialogvue_type_template_id_574b941f_scoped_true_render,
15374
+ VoiceInputDialogvue_type_template_id_574b941f_scoped_true_staticRenderFns,
15375
+ false,
15376
+ null,
15377
+ "574b941f",
15378
+ null
15379
+
15380
+ )
15381
+
15382
+ /* harmony default export */ var VoiceInputDialog = (VoiceInputDialog_component.exports);
14811
15383
  ;// 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
15384
  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
15385
  var moment = __webpack_require__(5093);
14814
15386
 
15387
+
14815
15388
  /* harmony default export */ var SubmitHandlevue_type_script_lang_js = ({
14816
15389
  name: 'SubmitHandle',
14817
15390
  components: {
14818
- WfTaskNode: WfTaskNode
15391
+ WfTaskNode: WfTaskNode,
15392
+ VoiceInputDialog: VoiceInputDialog
14819
15393
  },
14820
15394
  props: {
14821
15395
  curTN: {
@@ -14949,7 +15523,11 @@ var moment = __webpack_require__(5093);
14949
15523
  defaultNumber: 8,
14950
15524
  // 超出默认展示两行(个数)
14951
15525
  viewCommentsNum: 8,
14952
- selectedUsersCount: {} //节点已选择人数
15526
+ selectedUsersCount: {},
15527
+ //节点已选择人数
15528
+ voiceDialogVisible: false,
15529
+ // 语音输入弹窗
15530
+ voiceInputEnabled: false // 当前环境是否支持语音输入
14953
15531
  };
14954
15532
  },
14955
15533
  computed: {
@@ -14992,6 +15570,7 @@ var moment = __webpack_require__(5093);
14992
15570
  },
14993
15571
  created: function created() {
14994
15572
  // this.setMargin()
15573
+ this.initVoiceInputEnabled();
14995
15574
  this.$bus.on('initSubmitHandle', this.initSubmitHandle);
14996
15575
  },
14997
15576
  beforeDestroy: function beforeDestroy() {
@@ -15018,6 +15597,26 @@ var moment = __webpack_require__(5093);
15018
15597
  }
15019
15598
  },
15020
15599
  methods: {
15600
+ // 检测语音输入按钮可用性:未配置window.voiceToWord时需https/localhost安全上下文且浏览器支持Web Speech API,否则不显示按钮
15601
+ initVoiceInputEnabled: function initVoiceInputEnabled() {
15602
+ var voiceToWord = window.voiceToWord;
15603
+ if (voiceToWord && typeof voiceToWord === 'string' && voiceToWord !== 'browser') {
15604
+ // 后端接口转文字:需getUserMedia录音(同样仅安全上下文下可用)
15605
+ this.voiceInputEnabled = !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
15606
+ } else {
15607
+ // 浏览器直转文字:需安全上下文且支持SpeechRecognition
15608
+ this.voiceInputEnabled = window.isSecureContext === true && ('webkitSpeechRecognition' in window || 'SpeechRecognition' in window);
15609
+ }
15610
+ },
15611
+ openVoiceInput: function openVoiceInput() {
15612
+ this.voiceDialogVisible = true;
15613
+ },
15614
+ onVoiceConfirm: function onVoiceConfirm(text) {
15615
+ if (!text) return;
15616
+ var curUserIdea = this.submitHandle.curUserIdea;
15617
+ this.$set(this.submitHandle, 'curUserIdea', curUserIdea && curUserIdea.trim() !== '' ? curUserIdea + ' ' + text : text);
15618
+ this.$forceUpdate();
15619
+ },
15021
15620
  // 计算边距
15022
15621
  setMargin: function setMargin() {
15023
15622
  var columnsNum = Math.floor((screen.width - 20) / 93); // 列数
@@ -15802,9 +16401,9 @@ var moment = __webpack_require__(5093);
15802
16401
  });
15803
16402
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=script&lang=js
15804
16403
  /* 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
16404
+ // 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
16405
+ var SubmitHandlevue_type_style_index_0_id_44733f4f_prod_scoped_true_lang_scss = __webpack_require__(9500);
16406
+ ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue?vue&type=style&index=0&id=44733f4f&prod&scoped=true&lang=scss
15808
16407
 
15809
16408
  ;// CONCATENATED MODULE: ./packages/ecmapp/Wflowform/src/SubmitHandle.vue
15810
16409
 
@@ -15817,11 +16416,11 @@ var SubmitHandlevue_type_style_index_0_id_6451f4d6_prod_scoped_true_lang_scss =
15817
16416
 
15818
16417
  var SubmitHandle_component = (0,componentNormalizer/* default */.A)(
15819
16418
  src_SubmitHandlevue_type_script_lang_js,
15820
- SubmitHandlevue_type_template_id_6451f4d6_scoped_true_render,
15821
- SubmitHandlevue_type_template_id_6451f4d6_scoped_true_staticRenderFns,
16419
+ SubmitHandlevue_type_template_id_44733f4f_scoped_true_render,
16420
+ SubmitHandlevue_type_template_id_44733f4f_scoped_true_staticRenderFns,
15822
16421
  false,
15823
16422
  null,
15824
- "6451f4d6",
16423
+ "44733f4f",
15825
16424
  null
15826
16425
 
15827
16426
  )
@@ -22261,7 +22860,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, ".submit-dialog-container[data-v-9c230b
22261
22860
 
22262
22861
  /***/ }),
22263
22862
 
22264
- /***/ 3986:
22863
+ /***/ 7103:
22265
22864
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
22266
22865
 
22267
22866
  "use strict";
@@ -22280,7 +22879,28 @@ var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require
22280
22879
  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
22880
  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
22881
  // 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%}", ""]);
22882
+ ___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%}", ""]);
22883
+ // Exports
22884
+ /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
22885
+
22886
+
22887
+ /***/ }),
22888
+
22889
+ /***/ 1914:
22890
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
22891
+
22892
+ "use strict";
22893
+ __webpack_require__.r(__webpack_exports__);
22894
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1601);
22895
+ /* 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__);
22896
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6314);
22897
+ /* 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__);
22898
+ // Imports
22899
+
22900
+
22901
+ 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()));
22902
+ // Module
22903
+ ___CSS_LOADER_EXPORT___.push([module.id, ".voice-input-popup[data-v-574b941f]{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.voice-input-popup .voice-popup-header[data-v-574b941f]{position:relative;height:48px;line-height:48px;text-align:center}.voice-input-popup .voice-popup-header .voice-popup-title[data-v-574b941f]{font-size:16px;font-weight:600;color:#323233}.voice-input-popup .voice-popup-header .voice-popup-close[data-v-574b941f]{position:absolute;right:16px;top:16px;font-size:16px;color:#c8c9cc}.voice-input-popup .voice-popup-body[data-v-574b941f]{padding:8px 16px 0;text-align:center}.voice-input-popup .voice-popup-body .voice-mic-btn[data-v-574b941f]{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-574b941f]{width:28px;height:28px}.voice-input-popup .voice-popup-body .voice-mic-btn.recording[data-v-574b941f]{background-color:#ee0a24;-webkit-animation:voice-breathe-574b941f 1.5s ease-out infinite;animation:voice-breathe-574b941f 1.5s ease-out infinite}.voice-input-popup .voice-popup-body .voice-status-text[data-v-574b941f]{margin-top:12px;font-size:13px;color:#646566}.voice-input-popup .voice-popup-body .voice-status-text.is-error[data-v-574b941f]{color:#ee0a24}.voice-input-popup .voice-popup-body .voice-wave-canvas[data-v-574b941f]{display:block;width:200px;height:32px;margin:8px auto 0}.voice-input-popup .voice-popup-body .voice-timer[data-v-574b941f]{margin-top:4px;font-size:13px;color:#969799}.voice-input-popup .voice-popup-body .voice-result-field[data-v-574b941f]{margin-top:12px;background-color:#f7f8fa;border-radius:8px}.voice-input-popup .voice-popup-footer[data-v-574b941f]{padding:12px 16px;text-align:right}.voice-input-popup .voice-popup-footer .van-button[data-v-574b941f]{margin-left:8px;min-width:80px}@-webkit-keyframes voice-breathe-574b941f{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-574b941f{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
22904
  // Exports
22285
22905
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
22286
22906
 
@@ -49912,19 +50532,35 @@ var update = add("72ae29a9", content, true, {"sourceMap":false,"shadowMode":fals
49912
50532
 
49913
50533
  /***/ }),
49914
50534
 
49915
- /***/ 3681:
50535
+ /***/ 9500:
50536
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
50537
+
50538
+ // style-loader: Adds some css to the DOM by adding a <style> tag
50539
+
50540
+ // load the styles
50541
+ var content = __webpack_require__(7103);
50542
+ if(content.__esModule) content = content.default;
50543
+ if(typeof content === 'string') content = [[module.id, content, '']];
50544
+ if(content.locals) module.exports = content.locals;
50545
+ // add the styles to the DOM
50546
+ var add = (__webpack_require__(9548)/* ["default"] */ .A)
50547
+ var update = add("4f4e2226", content, true, {"sourceMap":false,"shadowMode":false});
50548
+
50549
+ /***/ }),
50550
+
50551
+ /***/ 273:
49916
50552
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
49917
50553
 
49918
50554
  // style-loader: Adds some css to the DOM by adding a <style> tag
49919
50555
 
49920
50556
  // load the styles
49921
- var content = __webpack_require__(3986);
50557
+ var content = __webpack_require__(1914);
49922
50558
  if(content.__esModule) content = content.default;
49923
50559
  if(typeof content === 'string') content = [[module.id, content, '']];
49924
50560
  if(content.locals) module.exports = content.locals;
49925
50561
  // add the styles to the DOM
49926
50562
  var add = (__webpack_require__(9548)/* ["default"] */ .A)
49927
- var update = add("651bfa7f", content, true, {"sourceMap":false,"shadowMode":false});
50563
+ var update = add("97a58776", content, true, {"sourceMap":false,"shadowMode":false});
49928
50564
 
49929
50565
  /***/ }),
49930
50566
 
@@ -72303,39 +72939,39 @@ var asyncComponents = [
72303
72939
  }],
72304
72940
  // ========== ecmapp/Wflowform 工作流表单子组件 → chunk: m-wflow-form ==========
72305
72941
  ['Attachment', function () {
72306
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72942
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4558)).then(function (m) {
72307
72943
  return m.Attachment;
72308
72944
  });
72309
72945
  }], ['BodyFile', function () {
72310
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72946
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4558)).then(function (m) {
72311
72947
  return m.BodyFile;
72312
72948
  });
72313
72949
  }], ['HandleIdea', function () {
72314
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72950
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4558)).then(function (m) {
72315
72951
  return m.HandleIdea;
72316
72952
  });
72317
72953
  }], ['SelectOuterDeputy', function () {
72318
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630)).then(function (m) {
72954
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4558)).then(function (m) {
72319
72955
  return m.SelectOuterDeputy;
72320
72956
  });
72321
72957
  }], ['SubmitHandle', function () {
72322
- 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__, 4558)).then(function (m) {
72323
72959
  return m.SubmitHandle;
72324
72960
  });
72325
72961
  }], ['SubmitDialog', function () {
72326
- 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__, 4558)).then(function (m) {
72327
72963
  return m.SubmitDialog;
72328
72964
  });
72329
72965
  }], ['ShortcutProcessing', function () {
72330
- 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__, 4558)).then(function (m) {
72331
72967
  return m.ShortcutProcessing;
72332
72968
  });
72333
72969
  }], ['WfNodelogList', function () {
72334
- 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__, 4558)).then(function (m) {
72335
72971
  return m.WfNodelogList;
72336
72972
  });
72337
72973
  }], ['WriteToReadIdea', function () {
72338
- 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__, 4558)).then(function (m) {
72339
72975
  return m.WriteToReadIdea;
72340
72976
  });
72341
72977
  }]];
@@ -72388,7 +73024,7 @@ var WfengineModule = function WfengineModule() {
72388
73024
  return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6322));
72389
73025
  };
72390
73026
  var WflowformModule = function WflowformModule() {
72391
- return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9630));
73027
+ return Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4558));
72392
73028
  };
72393
73029
 
72394
73030
  // ---------- 重型功能(PDF/富文本,仅特定页面使用) ----------