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