/* * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ /******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=script&lang=js": /*!**************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=script&lang=js ***! \**************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _components_NaviMenu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/components/NaviMenu */ \"./src/components/NaviMenu.vue\");\n/* harmony import */ var _components_ExhibitDetail__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/ExhibitDetail */ \"./src/components/ExhibitDetail.vue\");\n/* harmony import */ var _components_DeviceMonitor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/DeviceMonitor */ \"./src/components/DeviceMonitor.vue\");\n/* harmony import */ var _components_LocationManager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/LocationManager */ \"./src/components/LocationManager.vue\");\n/* harmony import */ var _components_UserLogin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/UserLogin */ \"./src/components/UserLogin.vue\");\n/* harmony import */ var _components_MuseumSubscriptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/MuseumSubscriptions */ \"./src/components/MuseumSubscriptions.vue\");\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'App',\n components: {\n NaviMenu: _components_NaviMenu__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n ExhibitDetail: _components_ExhibitDetail__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n DeviceMonitor: _components_DeviceMonitor__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n LocationManager: _components_LocationManager__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n UserLogin: _components_UserLogin__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n MuseumSubscriptions: _components_MuseumSubscriptions__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n },\n data() {\n return {\n museumListData: [],\n museumAntiqueListData: [],\n activeMenuIndex: '1',\n isAuthed: false,\n menu_authed: [],\n museum_authed: [],\n defaultActive: '1'\n };\n },\n created() {},\n async mounted() {},\n methods: {\n // eslint-disable-next-line no-unused-vars\n naviMenuSelect(key) {\n this.activeMenuIndex = key;\n console.log(\"app vue navi menu\", key);\n },\n confirmLogin(response) {\n this.isAuthed = true; //已经授权\n // eslint-disable-next-line no-prototype-builtins\n if (response.hasOwnProperty('menu_authed') && Array.isArray(response.menu_authed)) this.menu_authed = response.menu_authed;\n if (this.menu_authed.includes('data_admin')) {\n this.defaultActive = '1';\n this.activeMenuIndex = '1';\n } else if (this.menu_authed.length > 0 && this.menu_authed[0] == 'get_subscriptions') {\n this.defaultActive = '4';\n this.activeMenuIndex = '4';\n } else if (this.menu_authed.length > 0 && this.menu_authed[0] == 'location_admin') {\n this.defaultActive = '3';\n this.activeMenuIndex = '3';\n }\n\n // eslint-disable-next-line no-prototype-builtins\n if (response.hasOwnProperty('museum_authed') && Array.isArray(response.museum_authed)) this.museum_authed = response.museum_authed;\n console.log(\"App.vue confirm-login\", response, this.menu_authed, this.museum_authed);\n }\n },\n computed: {\n hasSubscriptionsMenu() {\n if (this.menu_authed && this.menu_authed.includes('get_subscriptions')) return true;else return false;\n },\n hasDataAdminMenu() {\n if (this.menu_authed && this.menu_authed.includes('data_admin')) return true;else return false;\n },\n hasLocationMenu() {\n if (this.menu_authed && this.menu_authed.includes('location_admin')) return true;else return false;\n },\n hasDeviceMenu() {\n if (this.menu_authed && this.menu_authed.includes('device_admin')) return true;else return false;\n }\n }\n});\n\n//# sourceURL=webpack://museum-admin/./src/App.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AiTextEditor.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AiTextEditor.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _API_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/API/api */ \"./src/API/api.js\");\n// eslint-disable-next-line no-unused-vars\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"AiTextEditor\",\n props: {\n 'mesumSelectedId': {\n default: -1\n },\n 'mesumSelected': {},\n 'initData': {},\n 'visible': {\n default: false\n },\n 'photo_prefix': {\n default: 'temp'\n }\n },\n data() {\n return {\n formData: {\n action: \"update\",\n mesum_id: 1,\n id: \"\",\n text: '',\n label: \"\",\n category: \"\",\n formTitle: \"修改讲解点\",\n aiRefinedAntiqueDetialText: \"\"\n },\n aiRefining: false,\n dialogVisible: false,\n aiRefineDetailMaxWords: 400,\n //500字的音频将近2分钟,所以将文字控制在400字,音频1:40秒\n detialMaxWordsOptions: [{\n label: '限制300字',\n value: 300\n }, {\n label: '限制400字',\n value: 400\n }, {\n label: '限制500字',\n value: 500\n }, {\n label: '限制600字',\n value: 600\n }]\n };\n },\n created() {},\n mounted() {},\n methods: {\n refineAntiqueDetailText() {\n this.aiRefining = true;\n const conversation = [{\n role: \"system\",\n content: `你是一名展品或者文物讲解专家,请将用户的提供的解说词,整理一下,` + `字数超过${this.aiRefineDetailMaxWords - 30},但少于${this.aiRefineDetailMaxWords},输出内容不要分段`\n }, {\n role: \"user\",\n content: `${this.formData.aiOriginAntiqueDetailText}`\n }];\n (0,_API_api__WEBPACK_IMPORTED_MODULE_0__.chatWithAI)(conversation).then(response => {\n console.log(\"AI回复:\", response.message.content);\n this.aiRefining = false;\n this.formData.aiRefinedAntiqueDetialText = response.message.content;\n this.formData.text = response.message.content;\n }).catch(error => {\n console.error(\"请求失败:\", error.message);\n this.aiRefining = false;\n });\n },\n handleConfirmCommitAiRefinedText() {\n this.submitUpdateAntique(this.aiRefineForm);\n this.closeDialog();\n },\n async submitUpdateAntique(new_data) {\n let antique_data = {\n mesum_id: this.mesumSelectedId\n //根据传入参数中包含的key,在下面程序动态设置\n //label:this.formData.label,\n //combined:this.formData.text,\n //category:this.formData.category\n };\n // eslint-disable-next-line no-prototype-builtins\n if (new_data.hasOwnProperty('label')) antique_data['label'] = new_data['label'];\n // eslint-disable-next-line no-prototype-builtins\n if (new_data.hasOwnProperty('text')) antique_data['combined'] = new_data['text'];\n // eslint-disable-next-line no-prototype-builtins\n if (new_data.hasOwnProperty('category')) antique_data['category'] = new_data['category'];\n this.$confirm('确认更改?').then(async () => {\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_0__.BASE_API_URL}/mesum/antique/update/${this.mesumSelectedId}/${new_data.id}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify(antique_data)\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.update) {\n this.triggerRefreshAntiques();\n this.$message('更新成功');\n this.closeDialog();\n }\n console.log(\"update antique\", data);\n }).catch(() => {});\n },\n handleDialogClose(done) {\n /*this.$confirm('确认关闭?')\r\n .then(_ => {\r\n done();\r\n })\r\n .catch(_ => {});\r\n */\n done();\n this.closeDialog();\n },\n closeDialog() {\n this.dialogVisible = false;\n this.$emit(\"update:close\", true);\n },\n triggerRefreshAntiques() {\n // 传递展品ID,用于单独刷新该展品\n this.$emit(\"update:refresh\", this.formData.id);\n }\n },\n watch: {\n visible: {\n handler(newVal) {\n this.dialogVisible = newVal;\n if (newVal) {\n this.formData = {\n ...this.formData,\n ...this.initData\n };\n this.formData.aiRefinedAntiqueDetialText = \"\";\n this.formData.text = \"\";\n }\n console.log(\"watch visible\", newVal, this.initData);\n },\n immediate: true\n }\n },\n computed: {}\n});\n\n//# sourceURL=webpack://museum-admin/./src/components/AiTextEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DetailEditor.vue?vue&type=script&lang=js": /*!**********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DetailEditor.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _API_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/API/api */ \"./src/API/api.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"DetailEditor\",\n props: {\n 'mesumSelectedId': {\n default: -1\n },\n 'mesumSelected': {},\n 'initData': {},\n 'visible': {\n default: false\n },\n 'photo_prefix': {\n default: 'temp'\n }\n },\n inject: {\n 'root': {\n default: null\n },\n 'getProject': {\n default: null\n },\n 'getSchedule': {\n default: null\n }\n },\n data() {\n return {\n formData: {\n action: \"update\",\n mesum_id: 1,\n id: \"\",\n text: '',\n label: \"\",\n category: \"\",\n voiceType: 'zh_male_ruyaqingnian_mars_bigtts',\n ttsUrl_cn: \"\",\n photoFileObject: null,\n formTitle: \"修改讲解点\"\n },\n originalFormData: {},\n // 保存原始数据用于比对\n preview: {\n visible_adult: false,\n visible_child: false,\n downReady_adult: false,\n downReady_child: false,\n audioSrc_adult: '',\n audioSrc_child: \"\",\n tempFile_adult: null,\n tempFile_child: null,\n tempBlob_adult: null,\n // 存储生成的音频Blob\n tempBlob_child: null // 存储生成的音频Blob\n },\n upload: {\n minioPath: 'mp3',\n isUploading: false\n },\n uploadFile_adult: null,\n uploadFile_child: null,\n result: {\n error: null,\n success: false,\n minioUrl: ''\n },\n isTTSGenerating: false,\n voiceSelected_adult: \"sambert-zhichu-v1@Tongyi-Qianwen\",\n //\"cosyvoice-v1/longyuan@Tongyi-Qianwen\",\n voiceSelected_child: \"cosyvoice-v1/longhua@Tongyi-Qianwen\",\n downloadFilename_adult: \"dale_1_test.mp3\",\n downloadFilename_child: \"dale_2_test.mp3\",\n voiceOptions: [{\n \"value\": \"cosyvoice-v1/longyuan@Tongyi-Qianwen\",\n \"label\": \"亲切女生\"\n }, {\n \"value\": \"sambert-zhiru-v1@Tongyi-Qianwen\",\n \"label\": \"新闻女生\"\n }, {\n \"value\": \"cosyvoice-v1/longhua@Tongyi-Qianwen\",\n \"label\": \"活泼女童\"\n }, {\n \"value\": \"cosyvoice-v1/longxiang@Tongyi-Qianwen\",\n \"label\": \"解说男声\"\n }, {\n \"value\": \"cosyvoice-v1/longyue@Tongyi-Qianwen\",\n \"label\": \"longyue\"\n }, {\n \"value\": \"cosyvoice-v1/longwan@Tongyi-Qianwen\",\n \"label\": \"longwan\"\n },\n //{ \"value\": \"sambert-zhide-v1@Tongyi-Qianwen\",\"label\" :\"新闻男声\" },\n {\n \"value\": \"sambert-zhichu-v1@Tongyi-Qianwen\",\n \"label\": \"舌尖男声\"\n }, {\n \"value\": \"sambert-zhiying-v1@Tongyi-Qianwen\",\n \"label\": \"软萌童声\"\n }],\n dialogVisible: false,\n downloadStateAdult: 'idle',\n downloadStateChild: 'idle',\n //\n photoFileList: []\n };\n },\n created() {},\n mounted() {},\n methods: {\n async submitUpdateAntique(new_data) {\n // 比对数据,只提取有变化的字段\n const changedData = this.getChangedFields(new_data);\n\n // 如果没有任何字段变化,提示用户\n if (Object.keys(changedData).length === 0) {\n this.$message.warning('没有任何修改');\n return;\n }\n let antique_data = {\n mesum_id: this.mesumSelectedId,\n ...changedData // 只包含变化的字段\n };\n this.$confirm('确认更改?').then(async () => {\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/mesum/antique/update/${this.mesumSelectedId}/${new_data.id}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify(antique_data)\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.update) {\n // 更新成功后,更新原始数据为当前数据\n this.updateOriginalFormData();\n this.triggerRefreshAntiques();\n this.$message('更新成功');\n this.closeDialog();\n }\n console.log(\"update antique\", data);\n }).catch(() => {});\n },\n // 获取有变化的字段\n getChangedFields(new_data) {\n const changedData = {};\n const fieldMapping = {\n 'label': 'label',\n 'text': 'combined',\n 'category': 'category',\n 'category_l2': 'category_l2',\n 'tags': 'tags'\n };\n for (const [formKey, apiKey] of Object.entries(fieldMapping)) {\n // eslint-disable-next-line no-prototype-builtins\n if (new_data.hasOwnProperty(formKey)) {\n // 比对新旧值,只有不同时才添加\n if (new_data[formKey] !== this.originalFormData[formKey]) {\n changedData[apiKey] = new_data[formKey];\n }\n }\n }\n return changedData;\n },\n // 更新原始数据\n updateOriginalFormData() {\n this.originalFormData = {\n label: this.formData.label,\n text: this.formData.text,\n category: this.formData.category,\n category_l2: this.formData.category_l2,\n tags: this.formData.tags\n };\n },\n async removeAntiqueTts(type) {\n this.$confirm('确认删除?').then(async () => {\n if (type == 'adult' && this.formData.ttsUrl_adult !== '') {\n // eslint-disable-next-line no-unused-vars\n const [baseUrl, file_name] = this.formData.ttsUrl_adult.split(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_tts_bucket_name}/`);\n if (file_name && file_name !== \"\") await this.removeMinioObject(_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_tts_bucket_name, file_name);\n }\n if (type == 'child' && this.formData.ttsUrl_child !== '') {\n // eslint-disable-next-line no-unused-vars\n const [baseUrl, file_name] = this.formData.ttsUrl_child.split(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_tts_bucket_name}/`);\n if (file_name && file_name !== \"\") await this.removeMinioObject(_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_tts_bucket_name, file_name);\n }\n if (this.updateAntiqueTts(type, \"\")) this.$message('删除音频地址成功');else this.$message('删除音频地址失败');\n }).catch(() => {});\n },\n async updateAntiqueTts(type, tts_url) {\n let antique_data = {\n mesum_id: this.mesumSelectedId\n };\n if (type == 'adult') {\n antique_data.ttsUrl_adult = tts_url;\n }\n if (type == 'child') {\n antique_data.ttsUrl_child = tts_url;\n }\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/mesum/antique/update/${this.formData.mesum_id}/${this.formData.id}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify(antique_data)\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.update) {\n if (type == 'adult') {\n this.formData.ttsUrl_adult = tts_url;\n }\n if (type == 'child') {\n this.formData.ttsUrl_child = tts_url;\n }\n this.triggerRefreshAntiques();\n //this.$message('更新成功');\n //this.closeDialog()\n return true;\n }\n return false;\n },\n async updateAntiquePhoto(photo_url) {\n let antique_data = {\n mesum_id: this.mesumSelectedId\n };\n antique_data.photo_url = photo_url;\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/mesum/antique/update/${this.formData.mesum_id}/${this.formData.id}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify(antique_data)\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.update) {\n this.triggerRefreshAntiques();\n this.formData.photo_url = photo_url;\n //this.$message('更新成功');\n //this.closeDialog()\n return true;\n }\n return false;\n },\n async removeAntiqueInServer(row) {\n this.$confirm('确认删除?').then(async () => {\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/mesum/antique/rm/${this.mesumSelectedId}/${row.id}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify({})\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.rm) {\n this.triggerRefreshAntiques();\n this.$message('删除成功');\n }\n console.log(\"remove antique\", data);\n }).catch(() => {});\n },\n async submitInsertAntique() {\n let antique_data = {\n mesum_id: this.mesumSelectedId,\n label: this.formData.label,\n combined: this.formData.text,\n category: this.formData.category\n };\n this.$confirm('确认插入?').then(async () => {\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/mesum/antique/insert/${this.mesumSelectedId}/99999999`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify(antique_data)\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.insert) {\n this.triggerRefreshAntiques();\n this.$message('新增成功');\n this.closeDialog();\n }\n console.log(\"insert antique\", data);\n }).catch(() => {});\n },\n // eslint-disable-next-line no-unused-vars\n voiceSelectedChangeAdult(value) {\n this.preview.visible_adult = false;\n this.preview.audioSrc_adult = \"\";\n },\n // eslint-disable-next-line no-unused-vars\n voiceSelectedChangeChild(value) {\n this.preview.visible_child = false;\n this.preview.audioSrc_child = \"\";\n },\n handleUploadChangeAdult(file) {\n console.log(file);\n this.uploadFile_adult = file.raw;\n },\n handleUploadChangeChild(file) {\n console.log(file);\n this.uploadFile_child = file.raw;\n },\n handleUploadExhibitPhotoChange(file) {\n // 确保每次都是新的文件对象\n this.photoFileList = [file];\n\n // 创建新的文件对象,避免引用问题\n const fileObj = {\n ...file,\n raw: file.raw,\n // 确保 raw 文件对象存在\n name: file.name\n };\n this.formData.photoFileObject = fileObj;\n\n // 生成预览URL\n if (file.raw) {\n const reader = new FileReader();\n console.log(\"begin read photo\");\n reader.onload = e => {\n // 创建包含 URL 的新对象\n const updatedFileObj = {\n ...fileObj,\n url: e.target.result\n };\n\n // 更新状态\n this.formData.photoFileObject = updatedFileObj;\n console.log(\"预览URL设置完成\", updatedFileObj.name, updatedFileObj);\n };\n reader.readAsDataURL(file.raw);\n }\n },\n // eslint-disable-next-line no-unused-vars\n handlePhotoPreview(file) {},\n // eslint-disable-next-line no-unused-vars\n handlePhotoRemove(file) {},\n // eslint-disable-next-line no-unused-vars\n handlePhotoExceed(files, fileList) {\n // 关键4:清空当前文件\n this.$refs.uploadPhotoRef.clearFiles();\n\n // 手动添加新文件\n const newFile = files[0];\n this.$refs.uploadPhotoRef.handleStart(newFile);\n\n // 更新预览\n this.handleUploadExhibitPhotoChange(newFile, [newFile]);\n },\n // eslint-disable-next-line no-unused-vars\n async handleRemovePhotoUrl(file) {\n // 先删除MinIO中的图片对象\n if (this.formData.photo_url && this.formData.photo_url !== '') {\n // eslint-disable-next-line no-unused-vars\n const [baseUrl, file_name] = this.formData.photo_url.split(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_photo_bucket_name}/`);\n if (file_name && file_name !== \"\") await this.removeMinioObject(_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_photo_bucket_name, file_name);\n }\n // 再更新数据库\n await this.updateAntiquePhoto(\"\");\n this.photoFileList = []; // 清空文件列表\n if (this.formData.photo_url) this.formData.photo_url = \"\";\n // 重置上传组件\n if (this.$refs.uploadPhotoRef) {\n this.$refs.uploadPhotoRef.clearFiles();\n }\n // 清空form中关联数据,响应式更新\n this.formData = {\n ...this.formData,\n \"photoFileObject\": null,\n \"photo_url\": \"\"\n };\n },\n // eslint-disable-next-line no-unused-vars\n async submitPhotoUpload(file) {\n try {\n // 如果已有图片,先删除旧的MinIO对象\n if (this.formData.photo_url && this.formData.photo_url !== '') {\n // eslint-disable-next-line no-unused-vars\n const [baseUrl, file_name] = this.formData.photo_url.split(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_photo_bucket_name}/`);\n if (file_name && file_name !== \"\") {\n await this.removeMinioObject(_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_photo_bucket_name, file_name);\n console.log('已删除旧图片:', file_name);\n }\n }\n\n // 上传新图片\n const formData = new FormData();\n formData.append('file', file.raw);\n // eslint-disable-next-line no-unused-vars\n const [name, extension] = file.name.split('.');\n const fileName = 'photo_' + window.pinyin.getFullChars(this.formData.label) + '.' + extension;\n formData.append('bucket', _API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_photo_bucket_name);\n formData.append('file_name', `${this.photo_prefix}/${fileName}`);\n console.log(\"submitPhotoUpload\", fileName);\n\n // 使用fetch发送请求\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/minio/put`, {\n method: 'POST',\n body: formData,\n headers: {\n \"Authorization\": \"Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm\"\n }\n });\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n const res = await response.json();\n const {\n data\n } = res;\n if (data?.put) {\n await this.updateAntiquePhoto(data?.url);\n this.$message.success('上传图片成功');\n // 添加时间戳避免缓存\n this.formData.photo_url = data?.url + '?t=' + Date.now();\n }\n } catch (error) {\n console.error('上传图片失败:', error);\n this.$message.error('上传图片失败');\n }\n },\n async generateTTS1(type) {\n //type 为 adult child 2 种\n let voice = this.voiceSelected_adult;\n if (type == 'adult') {\n this.downloadFilename_adult = 'tts_1_' + window.pinyin.getFullChars(this.formData.label) + '.mp3';\n }\n if (type == 'child') {\n this.downloadFilename_child = 'tts_2_' + window.pinyin.getFullChars(this.formData.label) + '.mp3';\n voice = this.voiceSelected_child;\n }\n try {\n console.log(voice);\n this.isTTSGenerating = true;\n //const response = await fetch(`${BASE_API_URL}/chats/${chatId}/tts`, {\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.TEST_API_URL}/tts/chats/${_API_api__WEBPACK_IMPORTED_MODULE_1__.chatId}/tts`, {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": \"Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm\"\n },\n body: JSON.stringify({\n text: this.formData.text,\n model_name: voice,\n //\"cosyvoice-v1/longyuan@Tongyi-Qianwen\",\n session_id: \"0b4cdbaeaf9111efa53df171065841e8\",\n delay_gen_audio: false,\n tts_sample_rate: 22050,\n //44100,\n tts_stream_format: 'mp3'\n })\n });\n this.isTTSGenerating = false;\n const result = await response.json();\n const {\n tts_url\n } = result;\n if (tts_url) {\n if (type == 'adult') {\n this.preview.visible_adult = false;\n this.preview.downReady_adult = true;\n //this.preview.audioSrc_adult =`${BASE_API_URL}${tts_url}`\n this.preview.audioSrc_adult = `${_API_api__WEBPACK_IMPORTED_MODULE_1__.TEST_API_URL}/tts${tts_url}`;\n this.preview.tempFile_adult = result.temp_filename;\n console.log(\"gen tts adult\", this.preview.audioSrc_adult = `${_API_api__WEBPACK_IMPORTED_MODULE_1__.TEST_API_URL}/tts${tts_url}`);\n }\n if (type == 'child') {\n this.preview.visible_child = false;\n this.preview.downReady_child = true;\n //this.preview.audioSrc_child =`${BASE_API_URL}${tts_url}`\n this.preview.audioSrc_child = `${_API_api__WEBPACK_IMPORTED_MODULE_1__.TEST_API_URL}/tts${tts_url}`;\n this.preview.tempFile_child = result.temp_filename;\n console.log(\"gen tts child\", this.preview.audioSrc_child = `${_API_api__WEBPACK_IMPORTED_MODULE_1__.TEST_API_URL}/tts${tts_url}`);\n }\n }\n } catch (error) {\n this.showError(error.message);\n }\n },\n // eslint-disable-next-line no-unused-vars\n async generateTTS(type) {\n let voice = this.voiceSelected_adult;\n if (type == 'adult') {\n this.downloadFilename_adult = 'tts_1_' + window.pinyin.getFullChars(this.formData.label) + '.mp3';\n }\n if (type == 'child') {\n this.downloadFilename_child = 'tts_2_' + window.pinyin.getFullChars(this.formData.label) + '.mp3';\n voice = this.voiceSelected_child;\n }\n try {\n this.isTTSGenerating = true;\n // 重置预览状态\n if (type === 'adult') {\n this.preview.audioSrc_adult = null;\n this.preview.downReady_adult = false;\n } else {\n this.preview.audioSrc_child = null;\n this.preview.downReady_child = false;\n }\n // 创建WebSocket连接\n const wsUrl = `${_API_api__WEBPACK_IMPORTED_MODULE_1__.WEIXIN_WS_URL}/tts/chats/${_API_api__WEBPACK_IMPORTED_MODULE_1__.chatId}/tts/x-tts-type-is-TextToTts`;\n //service_type = headers.get(\"x-tts-type\") # 注意:header 名称转为小写\n const ws = new WebSocket(wsUrl);\n\n // 设置音频类型特定的变量\n let audioChunks = [];\n ws.onopen = () => {\n // 发送TTS请求参数\n ws.send(JSON.stringify({\n service_type: \"TextToTts\",\n text: this.formData.text,\n params: {\n tts_stream_format: 'mp3',\n tts_sample_rate: 22050,\n model_name: voice,\n delay_gen_audio: true\n }\n }));\n };\n ws.onmessage = async event => {\n if (typeof event.data === 'string') {\n // 处理文本消息(如错误信息)\n try {\n const message = JSON.parse(event.data);\n if (message.error) {\n this.showError(message.error);\n } else if (message.status === \"completed\") {\n // WebSocket完成通知\n ws.close();\n }\n } catch (e) {\n console.log(\"Non-JSON message:\", event.data);\n }\n } else {\n // 处理二进制音频数据\n audioChunks.push(event.data);\n console.log(\"收到音频数据\", event.data.size);\n }\n };\n ws.onclose = () => {\n this.isTTSGenerating = false;\n\n // 最终音频处理\n if (audioChunks.length > 0) {\n //audioBlob = new Blob(audioChunks, { type: 'audio/mpeg' });\n const blob = new Blob(audioChunks, {\n type: 'audio/mpeg'\n });\n const url = URL.createObjectURL(blob);\n if (type === 'adult') {\n if (this.preview.audioSrc_adult) {\n URL.revokeObjectURL(this.preview.audioSrc_adult);\n }\n this.preview.audioSrc_adult = url;\n this.preview.tempBlob_adult = blob; // 保存Blob对象\n } else {\n this.preview.audioSrc_child = url;\n this.preview.tempBlob_child = blob; // 保存Blob对象\n }\n if (type === 'adult') {\n if (this.preview.audioSrc_child) {\n URL.revokeObjectURL(this.preview.audioSrc_child);\n }\n this.preview.downReady_adult = true;\n this.preview.visible_adult = false;\n } else {\n this.preview.downReady_child = true;\n this.preview.visible_child = false;\n }\n }\n };\n ws.onerror = error => {\n this.isTTSGenerating = false;\n this.showError(\"WebSocket连接错误: \" + error.message);\n };\n } catch (error) {\n this.isTTSGenerating = false;\n this.showError(error.message);\n }\n },\n downloadTTS(type) {\n if (type == 'adult') this.downloadFile(this.preview.audioSrc_adult, this.downloadFilename_adult, type);\n if (type == 'child') this.downloadFile(this.preview.audioSrc_child, this.downloadFilename_child, type);\n },\n downloadFile(content, filename, type) {\n let blob;\n if (type === 'adult') {\n blob = this.preview.tempBlob_adult;\n this.downloadStateAdult = \"download\";\n } else {\n blob = this.preview.tempBlob_child;\n this.downloadStateChild = \"download\";\n }\n if (!blob) {\n this.showError(\"没有可下载的音频\");\n return;\n }\n\n // 创建下载链接\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n\n // 清理\n URL.revokeObjectURL(url);\n document.body.removeChild(a);\n\n // 更新状态\n if (type === 'adult') {\n this.preview.visible_adult = true;\n this.downloadStateAdult = \"finished\";\n } else {\n this.preview.visible_child = true;\n this.downloadStateChild = \"finished\";\n }\n this.resetDownloadState(type);\n },\n // eslint-disable-next-line no-unused-vars\n async downloadFile1(content, filename, type) {\n this.isDownloading = true;\n if (type == 'adult') this.downloadStateAdult = \"download\";\n if (type == 'child') this.downloadStateChild = \"download\";\n this.resetDownloadState(type);\n try {\n // 创建AbortController以便取消请求\n this.controller = new AbortController();\n const response = await fetch(content, {\n signal: this.controller.signal\n });\n\n // 处理错误响应\n if (!response.ok) {\n throw new Error(`HTTP错误: ${response.status}`);\n }\n\n // 创建可读流\n this.reader = response.body.getReader();\n const chunks = [];\n let totalSize = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const {\n done,\n value\n } = await this.reader.read();\n if (done) break;\n chunks.push(value);\n totalSize += value.byteLength;\n\n // 更新进度(示例使用固定总大小,实际应根据Content-Length调整)\n this.progress = Math.min(100, totalSize / (1024 * 1024) * 100); // 假设1MB文件\n }\n console.log(\"准备存储\");\n if (type == 'adult') this.downloadStateAdult = \"save\";\n if (type == 'child') this.downloadStateChild = \"save\";\n // 合并数据\n const blob = new Blob(chunks, {\n type: 'audio/mpeg'\n });\n\n // 创建下载链接\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `${filename}`;\n document.body.appendChild(a);\n a.click();\n\n // 清理\n URL.revokeObjectURL(url);\n document.body.removeChild(a);\n if (type == 'adult') {\n this.preview.visible_adult = true;\n this.downloadStateAdult = \"finished\";\n }\n if (type == 'child') {\n this.preview.visible_child = true;\n this.downloadStateChild = \"finished\";\n }\n } catch (error) {\n if (error.name !== 'AbortError') {\n this.error = `下载失败: ${error.message}`;\n }\n } finally {\n this.isDownloading = false;\n this.progress = 0;\n }\n },\n submitTTSUpload(type) {\n const formData = new FormData();\n if (type == 'adult') formData.append('file', this.uploadFile_adult);\n if (type == 'child') formData.append('file', this.uploadFile_child);\n formData.append('bucket', _API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_tts_bucket_name);\n formData.append('file_name', `${this.photo_prefix}/${this.uploadFileName(type)}`);\n // 使用fetch发送请求\n fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/minio/put`, {\n method: 'POST',\n body: formData,\n headers: {\n // fetch会自动设置Content-Type为multipart/form-data,无需手动指定\n \"Authorization\": \"Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm\"\n }\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json(); // 如果服务器返回JSON数据\n }).then(res => {\n const {\n data\n } = res;\n if (data?.put) {\n this.formData.ttsUrl_cn = data?.url;\n this.updateAntiqueTts(type, data?.url);\n this.$message.success('上传成功');\n }\n }).catch(error => {\n console.error('上传失败:', error);\n this.$message.error('上传失败');\n });\n },\n async removeMinioObject(bucket, fileName) {\n // 使用fetch发送请求\n fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/minio/rm`, {\n method: 'POST',\n body: JSON.stringify({\n bucket: bucket,\n file_name: fileName\n }),\n headers: {\n // fetch会自动设置Content-Type为multipart/form-data,无需手动指定\n \"Authorization\": \"Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm\"\n }\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json(); // 如果服务器返回JSON数据\n }).then(res => {\n const {\n data\n } = res;\n if (data?.rm) {\n this.$message.success('删除 url成功');\n }\n }).catch(error => {\n console.error('删除minio object 失败:', error);\n this.$message.error('删除minio object 失败');\n });\n },\n removeTtsUrl() {},\n // eslint-disable-next-line no-unused-vars\n resetDownloadState(type) {\n this.error = null;\n this.progress = 0;\n if (this.reader) {\n this.reader.cancel();\n }\n if (this.controller) {\n this.controller.abort();\n }\n },\n showError(message) {\n this.result.error = message;\n this.result.success = false;\n setTimeout(() => this.result.error = null, 5000);\n },\n resetState() {\n this.preview.visible_adult = false;\n this.preview.visible_child = false;\n this.result.success = false;\n this.result.error = null;\n },\n handleDialogClose(done) {\n /*this.$confirm('确认关闭?')\r\n .then(_ => {\r\n done();\r\n })\r\n .catch(_ => {});\r\n */\n const audioAdult = this.$refs.audioPlayerAdult;\n if (audioAdult) {\n audioAdult.pause(); // 停止播放\n //audioAdult.currentTime = 0; // 可选:将播放进度重置到开头\n }\n const audioChild = this.$refs.audioPlayerChild;\n if (audioChild) {\n audioChild.pause(); // 停止播放\n //audioChild.currentTime = 0; // 可选:将播放进度重置到开头\n }\n done();\n this.closeDialog();\n },\n closeDialog() {\n this.dialogVisible = false;\n this.$emit(\"update:close\", true);\n },\n triggerRefreshAntiques() {\n // 传递展品ID,用于单独刷新该展品\n this.$emit(\"update:refresh\", this.formData.id);\n },\n triggerSubmitSave(rowData) {\n this.$emit(\"update:save\", rowData);\n }\n },\n watch: {\n visible: {\n handler(newVal) {\n this.dialogVisible = newVal;\n if (newVal) {\n this.formData = {\n ...this.formData,\n ...this.initData\n };\n // 初始化时保存原始数据\n this.originalFormData = {\n label: this.formData.label,\n text: this.formData.text,\n category: this.formData.category,\n category_l2: this.formData.category_l2,\n tags: this.formData.tags\n };\n this.downloadStateAdult = 'idle';\n this.downloadStateChild = 'idle';\n }\n console.log(\"watch visible\", newVal, this.initData);\n },\n immediate: true\n },\n mesumSelectedId: {\n handler(newVal) {\n console.log(\"watch mesumSelectedId\", newVal);\n if (newVal == 2) {\n //针对 看.见殷商\n this.voiceSelected_adult = \"sambert-zhichu-v1@Tongyi-Qianwen\";\n /*this.voiceOptions.forEach((item)=>{\r\n console.log(\"watch mesumSelectedId--1\",item)\r\n if(item.label == '亲切女生'){\r\n this.voiceSelected_adult = \"zh_female_qingxinnvsheng_mars_bigtts\";\r\n item.value = \"zh_female_qingxinnvsheng_mars_bigtts\"\r\n }\r\n })*/\n } else if (newVal == 1) {\n this.voiceSelected_adult = \"cosyvoice-v1/longyuan@Tongyi-Qianwen\";\n } else {\n this.voiceSelected_adult = \"sambert-zhichu-v1@Tongyi-Qianwen\";\n }\n },\n immediate: true\n }\n },\n computed: {\n canUpload_adult() {\n return this.preview.tempFile_adult && !this.upload.isUploading;\n },\n canUpload_child() {\n return this.preview.tempFile_child && !this.upload.isUploading;\n },\n uploadFileName() {\n return type => {\n let uploadFile = this.uploadFile_adult;\n if (type == 'child') uploadFile = this.uploadFile_child;\n if (uploadFile && uploadFile.name) return uploadFile.name;else return \"\";\n };\n },\n downloadPromptAdult() {\n if (this.downloadStateAdult === 'idle') return \"\";\n if (this.downloadStateAdult === 'download') return \"下载中...\";\n if (this.downloadStateAdult === 'save') return \"存储中...\";\n if (this.downloadStateAdult === 'finished') return \"完成\";\n return \"\";\n },\n downloadPromptChild() {\n if (this.downloadStateChild === 'idle') return \"\";\n if (this.downloadStateChild === 'download') return \"下载中...\";\n if (this.downloadStateChild === 'save') return \"存储中...\";\n if (this.downloadStateChild === 'finished') return \"完成\";\n return \"\";\n },\n exhibitPhotoPreviewUrl() {\n console.log(\"addd\", this.formData);\n if (this.formData.photoFileObject) return this.formData.photoFileObject?.url;else if (this.formData.photo_url) {\n // 添加时间戳参数避免浏览器缓存\n const url = this.formData.photo_url;\n if (url.includes('?')) {\n return url; // 如果URL已经包含参数,直接返回\n }\n return url + '?t=' + Date.now();\n } else return \"\";\n }\n }\n});\n\n//# sourceURL=webpack://museum-admin/./src/components/DetailEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DeviceMonitor.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DeviceMonitor.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _API_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/API/api */ \"./src/API/api.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"DeviceMonitor\",\n data() {\n return {\n mesumSelectedId: -1,\n mesumOptions: [],\n currentDeviceList: [],\n deviceSelected: null,\n currentDeviceLogList: []\n };\n },\n created() {},\n mounted() {\n this.getMesumList();\n },\n methods: {\n // eslint-disable-next-line no-unused-vars\n async refreshDeviceList() {\n const response = await this.getDeviceList(this.mesumSelectedId);\n const {\n devices\n } = response;\n this.currentDeviceList = [];\n this.currentDeviceLogList.splice(0, this.currentDeviceLogList.length); //清空log文件列表\n // eslint-disable-next-line no-unused-vars\n //const device_ids = devices.map((item)=>{return item.device_id})\n this.currentDeviceList.splice(0, 0, ...devices);\n },\n async getDeviceList(museum_id) {\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_0__.DEVICE_API_URL}/device_list?museum_id=${museum_id}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n }\n });\n const result = await response.json();\n return result;\n },\n async deviceClick(device) {\n this.currentDeviceLogList.splice(0, this.currentDeviceLogList.length);\n this.deviceSelected = device;\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_0__.DEVICE_API_URL}/log_list?device_id=${device.device_id}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n const result = await response.json();\n const {\n success,\n files\n } = result;\n if (success) {\n this.currentDeviceLogList.splice(0, this.currentDeviceLogList.length);\n this.currentDeviceLogList.splice(0, 0, ...files);\n console.log(this.currentDeviceLogList);\n }\n },\n async downloadLogFile(fileName) {\n const deviceId = this.deviceSelected.device_id;\n try {\n // 构造请求URL\n const url = new URL(`${_API_api__WEBPACK_IMPORTED_MODULE_0__.DEVICE_API_URL}/get_log_file`);\n url.searchParams.set('device_id', deviceId);\n url.searchParams.set('file_name', fileName);\n\n // 发起GET请求\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\n // 处理响应\n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.message || '下载失败');\n }\n\n // 创建可下载的Blob\n const blob = await response.blob();\n const downloadUrl = window.URL.createObjectURL(blob);\n\n // 创建隐藏的标签触发下载\n const a = document.createElement('a');\n a.href = downloadUrl;\n a.download = deviceId + '_' + fileName;\n document.body.appendChild(a);\n a.click();\n\n // 清理资源\n window.URL.revokeObjectURL(downloadUrl);\n document.body.removeChild(a);\n } catch (error) {\n console.error('文件下载失败:', error);\n // 显示错误提示\n alert(`文件下载失败: ${error.message}`);\n }\n },\n // eslint-disable-next-line no-unused-vars\n async mesumSelectedChange(value) {},\n async getMesumList() {\n const data = await (0,_API_api__WEBPACK_IMPORTED_MODULE_0__.api_getMesumList)();\n if (data && Array.isArray(data) && data.length >= 1) {\n this.mesumOptions = [];\n this.mesumOptions = data;\n this.mesumSelected = data[0];\n this.mesumSelectedId = data[0].id;\n }\n console.log(data);\n }\n },\n watch: {},\n computed: {\n deviceIsSelected() {\n return item => {\n return item === this.deviceSelected?.device_id;\n };\n }\n }\n});\n\n//# sourceURL=webpack://museum-admin/./src/components/DeviceMonitor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ExhibitDetail.vue?vue&type=script&lang=js": /*!***********************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ExhibitDetail.vue?vue&type=script&lang=js ***! \***********************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/core-js/modules/es.iterator.filter.js\");\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_iterator_some_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.iterator.some.js */ \"./node_modules/core-js/modules/es.iterator.some.js\");\n/* harmony import */ var core_js_modules_es_iterator_some_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_some_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _API_api_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/API/api.js */ \"./src/API/api.js\");\n/* harmony import */ var _components_DetailEditor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/DetailEditor */ \"./src/components/DetailEditor.vue\");\n/* harmony import */ var _components_AiTextEditor__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/AiTextEditor */ \"./src/components/AiTextEditor.vue\");\n/* harmony import */ var _components_MarkdownEditor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/components/MarkdownEditor */ \"./src/components/MarkdownEditor.vue\");\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"ExhibitDetail\",\n props: {\n 'museumListData': {\n default: []\n },\n 'resource': {},\n 'mode': {},\n 'antiqueListData': {\n default: []\n }\n },\n inject: {\n 'root': {\n default: null\n },\n 'getProject': {\n default: null\n },\n 'getSchedule': {\n default: null\n }\n },\n components: {\n DetailEditor: _components_DetailEditor__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n AiTextEditor: _components_AiTextEditor__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n MarkdownEditor: _components_MarkdownEditor__WEBPACK_IMPORTED_MODULE_9__[\"default\"]\n },\n data() {\n return {\n form: {\n action: \"update\",\n mesum_id: 1,\n id: \"\",\n text: '',\n label: \"\",\n category: \"\",\n category_l2: null,\n tags: null,\n voiceType: 'zh_male_ruyaqingnian_mars_bigtts',\n ttsUrl_cn: \"\",\n photo_url: null,\n photoFileObject: null,\n formTitle: \"修改讲解点\"\n },\n upload: {\n minioPath: 'mp3',\n isUploading: false\n },\n uploadFile_adult: null,\n uploadFile_child: null,\n mesumOptions: [],\n mesumCategoryOptions: [],\n mesum_antiques: [],\n antiqueSelectedRow: null,\n dialogVisible: false,\n mesumSelectedId: null,\n mesumSelected: {\n id: 1\n },\n museumCategorySelectedId: null,\n currentDeviceList: [],\n deviceSelected: null,\n currentDeviceLogList: [],\n labelFilter: \"\",\n enableLabelFilter: false,\n tableHeight: 200,\n AiRefineDialogVisible: false,\n aiRefineForm: {\n id: \"\",\n text: '',\n aiOriginAntiqueDetailText: \"\"\n },\n labelToRefine: \"\",\n //\n // Markdown 编辑器相关\n markdownDialogVisible: false,\n markdownForm: {\n id: \"\",\n label: \"\",\n mesum_id: 1,\n md_file_url: \"\",\n md_tts_url: \"\"\n },\n //\n // 20250920 增加和行编辑有关的变量和函数\n editingRow: null,\n // 当前正在编辑的行原始数据\n editingRowData: {},\n // 编辑中的数据副本\n originalRowData: {} // 原始数据备份(用于取消编辑)\n };\n },\n created() {},\n async mounted() {\n await this.getMesumList();\n await this.getMesumAntiques(true);\n // 初始获取高度\n this.updateTableHeight();\n // 监听窗口大小变化\n window.addEventListener('resize', this.updateTableHeight);\n },\n beforeUnmount() {\n // 组件销毁时移除监听\n window.removeEventListener('resize', this.updateTableHeight);\n },\n methods: {\n // eslint-disable-next-line no-unused-vars\n async mesumCategorySelectedChange(_value) {\n this.enableLabelFilter = false;\n },\n filterByLabel() {\n this.enableLabelFilter = true;\n },\n async mesumSelectedChange(value) {\n this.form.mesum_id = value;\n this.mesumSelected = this.mesumOptions.find(item => {\n return item.id === this.mesumSelectedId;\n });\n await this.getMesumAntiques(true);\n },\n handleCurrentChange(val) {\n this.antiqueSelectedRow = val;\n // eslint-disable-next-line no-empty\n //if(this.antiqueSelectedRow){\n // this.startRowEdit(val)\n //}\n },\n // eslint-disable-next-line no-unused-vars\n triggerAiRefine(row) {\n if (!row.orgin_text || row.orgin_text == \"\") {\n this.$message.error(\"没有找到原始的解说词,或者原始解说词为空\");\n return;\n }\n this.aiRefineForm.aiOriginAntiqueDetailText = row.orgin_text;\n this.aiRefineForm.id = row.id;\n this.aiRefineForm.label = row.label;\n this.aiRefineForm.mesum_id = this.mesumSelectedId;\n this.AiRefineDialogVisible = true;\n },\n async insertAntiqueTrigger() {\n this.form.formTitle = \"新增讲解点\";\n this.form.action = 'insert';\n this.form.text = \"\";\n this.form.label = \"\";\n this.form.category = \"\";\n this.form.id = \"\";\n this.dialogVisible = true;\n },\n // 触发 Markdown 编辑器\n editMarkdownTrigger(row) {\n this.markdownForm.id = row.id;\n this.markdownForm.label = row.label;\n this.markdownForm.mesum_id = this.mesumSelectedId;\n this.markdownForm.md_file_url = row.md_file_url || \"\";\n this.markdownForm.md_tts_url = row.md_tts_url || \"\";\n this.markdownDialogVisible = true;\n console.log(\"editMarkdownTrigger\", row);\n },\n // eslint-disable-next-line no-unused-vars\n editAntiqueTrigger(row) {\n this.form.formTitle = \"修改讲解点\";\n this.uploadFile_adult = null;\n this.uploadFile_child = null;\n this.form.action = 'update';\n this.form.text = row.combined;\n this.form.label = row.label;\n this.form.category = row.category;\n this.form.category_l2 = row.category_l2;\n this.form.tags = row?.tags;\n this.form.id = row.id;\n this.form.ttsUrl_adult = row.ttsUrl_adult;\n this.form.ttsUrl_child = row.ttsUrl_child;\n this.form.photo_url = row.photo_url;\n this.form.photoFileObject = null;\n this.dialogVisible = true;\n console.log(\"editAntiqueTrigger\");\n },\n async removeMinioObject(bucket, fileName) {\n // 使用fetch发送请求\n fetch(`${_API_api_js__WEBPACK_IMPORTED_MODULE_6__.BASE_API_URL}/minio/rm`, {\n method: 'POST',\n body: JSON.stringify({\n bucket: bucket,\n file_name: fileName\n }),\n headers: {\n // fetch会自动设置Content-Type为multipart/form-data,无需手动指定\n \"Authorization\": \"Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm\"\n }\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json(); // 如果服务器返回JSON数据\n }).then(res => {\n const {\n data\n } = res;\n if (data?.rm) {\n this.$message.success('删除TTS url成功');\n }\n }).catch(error => {\n console.error('删除minio object 失败:', error);\n //this.$message.error('删除minio object 失败');\n });\n },\n // eslint-disable-next-line no-unused-vars\n async removeAntiqueInServer(row) {\n this.$confirm('确认删除?').then(async () => {\n try {\n //先删除tts\n if (row.ttsUrl_adult) {\n // eslint-disable-next-line no-unused-vars\n const [baseUrl_adult, file_name_adult] = row.ttsUrl_adult.split(`${_API_api_js__WEBPACK_IMPORTED_MODULE_6__.exhibit_tts_bucket_name}/`);\n if (file_name_adult && file_name_adult !== \"\") await this.removeMinioObject(_API_api_js__WEBPACK_IMPORTED_MODULE_6__.exhibit_tts_bucket_name, file_name_adult);\n }\n if (row.ttsUrl_child) {\n // eslint-disable-next-line no-unused-vars\n const [baseUrl_child, file_name_child] = row.ttsUrl_child.split(`${_API_api_js__WEBPACK_IMPORTED_MODULE_6__.exhibit_tts_bucket_name}/`);\n if (file_name_child && file_name_child !== \"\") await this.removeMinioObject(_API_api_js__WEBPACK_IMPORTED_MODULE_6__.exhibit_tts_bucket_name, file_name_child);\n }\n //删除展品图片\n if (row.photo_url) {\n // eslint-disable-next-line no-unused-vars\n const [baseUrl_child, file_name_child] = row.photo_url.split(`${_API_api_js__WEBPACK_IMPORTED_MODULE_6__.exhibit_photo_bucket_name}/`);\n if (file_name_child && file_name_child !== \"\") await this.removeMinioObject(_API_api_js__WEBPACK_IMPORTED_MODULE_6__.exhibit_photo_bucket_name, file_name_child);\n }\n // eslint-disable-next-line no-empty\n } finally {}\n const response = await fetch(`${_API_api_js__WEBPACK_IMPORTED_MODULE_6__.BASE_API_URL}/mesum/antique/rm/${this.mesumSelectedId}/${row.id}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify({})\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.rm) {\n this.getMesumAntiques();\n this.$message('删除成功');\n }\n console.log(\"remove antique\", data);\n }).catch(() => {});\n },\n updateTableHeight() {\n const titleRect = this.$refs.refTitle.getBoundingClientRect();\n this.tableHeight = window.innerHeight - titleRect.bottom - 16;\n },\n async getMesumList() {\n const data = await (0,_API_api_js__WEBPACK_IMPORTED_MODULE_6__.api_getMesumList)();\n if (data && Array.isArray(data) && data.length >= 1) {\n this.mesumOptions = [];\n this.mesumOptions = data;\n this.mesumSelected = data[0];\n this.mesumSelectedId = data[0].id;\n this.form.mesum_id = data[0].id;\n }\n console.log(data);\n },\n async getMesumAntiques(updateCategory) {\n const data = await (0,_API_api_js__WEBPACK_IMPORTED_MODULE_6__.api_getMesumAntiques)(this.mesumSelected.id);\n if (data) {\n console.log(data);\n const len = this.mesum_antiques.length;\n this.mesum_antiques.splice(0, len);\n this.mesum_antiques.splice(0, 0, ...data['anqituqes']);\n console.log(this.mesum_antiques);\n this.mesumCategoryOptions.splice(0, this.mesumCategoryOptions.length);\n if (data['categories'] && Array.isArray(data['categories'])) {\n const options = data['categories'].map((name, index) => {\n return {\n id: index,\n label: name\n };\n });\n options.push({\n id: options.length,\n label: \"全部\"\n });\n this.mesumCategoryOptions.splice(0, 0, ...options);\n if (options.length && updateCategory) {\n this.museumCategorySelectedId = this.mesumCategoryOptions[0].id;\n }\n }\n //this.updateFormContent(); //如果正在编辑,需要跟新对话框内容\n }\n },\n // 处理展品刷新事件\n async handleRefreshAntique(antiqueId) {\n if (typeof antiqueId === 'number' || typeof antiqueId === 'string') {\n let hasTargetId = this.mesum_antiques.some(item => item.id === Number(antiqueId));\n // 如果传入的是展品ID,只刷新该展品\n if (hasTargetId) await this.refreshSingleAntique(antiqueId);else await this.getMesumAntiques(false);\n } else {\n // 否则刷新整个列表(兼容旧逻辑或新增/删除情况)\n await this.getMesumAntiques(false);\n }\n },\n // 新增:只更新单个展品数据\n async refreshSingleAntique(antiqueId) {\n if (!antiqueId) {\n console.warn('展品ID为空,无法刷新');\n return;\n }\n try {\n // 调用API获取单个展品详情\n const updatedData = await (0,_API_api_js__WEBPACK_IMPORTED_MODULE_6__.api_getAntiqueDetail)(this.mesumSelectedId, antiqueId);\n if (updatedData) {\n // 在当前列表中查找并更新该展品\n const index = this.mesum_antiques.findIndex(item => item.id === antiqueId);\n if (index !== -1) {\n // 使用Vue3响应式更新方式,确保视图刷新\n this.mesum_antiques.splice(index, 1, updatedData);\n console.log(`展品 ${antiqueId} 已更新`);\n this.$message.success('展品数据已刷新');\n } else {\n console.warn(`未找到展品 ${antiqueId},刷新整个列表`);\n // 如果找不到(例如新增的展品),则重新获取整个列表\n await this.getMesumAntiques(false);\n }\n }\n } catch (error) {\n console.error('刷新展品数据失败:', error);\n this.$message.error('刷新失败,请重试');\n }\n },\n // 20250920 增加和行编辑有关的变量和函数\n // 开始编辑行\n async startRowEdit(row) {\n // 如果已经在编辑其他行,先保存或取消\n if (this.editingRow && this.editingRow.id !== row.id) {\n // 检查当前编辑的行数据是否有变化\n const hasChanges = this.isRowDataChanged(this.originalRowData, this.editingRowData);\n if (hasChanges) {\n // 有变化,提示用户是否保存\n try {\n await this.$confirm('当前编辑的内容尚未保存,是否保存?', '提示', {\n confirmButtonText: '保存',\n cancelButtonText: '不保存',\n type: 'warning'\n });\n // 用户选择保存\n await this.saveRowEdit();\n } catch (error) {\n if (error === 'cancel') {\n // 用户选择不保存,直接取消编辑\n this.cancelRowEdit();\n } else {\n // 用户关闭提示框,中止切换编辑行\n return;\n }\n }\n } else {\n // 没有变化,直接取消当前编辑\n this.cancelRowEdit();\n }\n }\n\n // 开始编辑新行\n this.startRowEditInternal(row);\n },\n // 实际开始编辑行的内部逻辑\n startRowEditInternal(row) {\n this.editingRow = {\n ...row\n };\n this.editingRowData = {\n ...row\n };\n this.originalRowData = {\n ...row\n };\n },\n // 保存行编辑\n async saveRowEdit() {\n if (!this.editingRow) return;\n try {\n // 验证行数据\n if (!this.validateRowData()) {\n return;\n }\n\n // 调用API更新后台\n await this.updateRowInBackend(this.editingRow.id, {\n 'sort_order': this.editingRowData.sort_order\n });\n\n // 更新前端表格数据 - 只刷新当前修改的展品\n await this.refreshSingleAntique(this.editingRow.id);\n this.$message.success('保存成功');\n this.cancelRowEdit();\n } catch (error) {\n this.$message.error('保存失败:' + error.message);\n }\n },\n // 取消行编辑\n cancelRowEdit() {\n if (this.editingRow) {\n // 恢复原始行数据\n }\n this.editingRow = null;\n this.editingRowData = {};\n this.originalRowData = {};\n },\n // 验证行数据\n validateRowData() {\n /*if (!this.editingRowData.category || this.editingRowData.category.trim() === '') {\r\n this.$message.warning('分类不能为空')\r\n return false\r\n }\r\n */\n // 验证序号不能为空\n if (this.editingRowData.sort_order === null || this.editingRowData.sort_order === undefined || this.editingRowData.sort_order === '') {\n this.$message.warning('序号不能为空');\n return false;\n }\n if (this.editingRowData.sort_order < 0) {\n this.$message.warning('序号不能为负数');\n return false;\n }\n return true;\n },\n // 调用后台API更新行数据\n // eslint-disable-next-line no-unused-vars\n async updateRowInBackend(id, new_data) {\n let antique_data = {\n mesum_id: this.mesumSelectedId\n //根据传入参数中包含的key,在下面程序动态设置\n //label:this.formData.label,\n //combined:this.formData.text,\n //category:this.formData.category\n };\n // eslint-disable-next-line no-prototype-builtins\n if (new_data.hasOwnProperty('label')) antique_data['label'] = new_data['label'];\n // eslint-disable-next-line no-prototype-builtins\n if (new_data.hasOwnProperty('text')) antique_data['combined'] = new_data['text'];\n // eslint-disable-next-line no-prototype-builtins\n if (new_data.hasOwnProperty('category')) antique_data['category'] = new_data['category'];\n // eslint-disable-next-line no-prototype-builtins\n if (new_data.hasOwnProperty('sort_order')) antique_data['sort_order'] = new_data['sort_order'];\n this.$confirm('确认更改?').then(async () => {\n const response = await fetch(`${_API_api_js__WEBPACK_IMPORTED_MODULE_6__.BASE_API_URL}/mesum/antique/update/${this.mesumSelectedId}/${id}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify(antique_data)\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.update) {\n // 只刷新单个展品数据\n await this.refreshSingleAntique(id);\n this.$message('更新成功');\n this.closeDialog();\n }\n console.log(\"update antique\", data);\n }).catch(() => {});\n },\n // 处理行点击事件\n handleRowClick(row, column, event) {\n // 防止点击按钮时触发双击编辑\n if (event.target.tagName !== 'BUTTON' && event.detail === 2) {\n this.startRowEdit(row);\n }\n },\n // 处理外部点击事件(保存编辑)\n handleOutsideClick(event) {\n if (this.editingRow && !event.target.closest('.editable-cell')) {\n this.saveRowEdit();\n }\n },\n // 判断行数据是否有变化\n isRowDataChanged(original, current) {\n // 检查所有可编辑字段是否发生变化\n const fieldsToCheck = ['sort_order'];\n return fieldsToCheck.some(field => {\n const originalValue = original[field];\n const currentValue = current[field];\n\n // 处理null和undefined的情况\n if (originalValue === null || originalValue === undefined) {\n return currentValue !== null && currentValue !== undefined;\n }\n\n // 处理字符串类型(去除前后空格比较)\n if (typeof originalValue === 'string') {\n return originalValue.trim() !== String(currentValue || '').trim();\n }\n\n // 其他类型直接比较\n return originalValue !== currentValue;\n });\n }\n },\n watch: {},\n computed: {\n rowSelected() {\n return row => {\n if (this.antiqueSelectedRow && this.antiqueSelectedRow.id == row.id) return true;else return false;\n };\n },\n ttsUrl_valid() {\n return url => {\n if (url && url !== '') return true;else return false;\n };\n },\n deviceIsSelected() {\n return item => {\n return item === this.deviceSelected?.device_id;\n };\n },\n antiqueFiltered() {\n if (this.enableLabelFilter) {\n if (this.labelFilter && this.labelFilter !== '') {\n return this.mesum_antiques.filter(item => {\n return item.label.includes(this.labelFilter);\n });\n } else\n // eslint-disable-next-line vue/no-side-effects-in-computed-properties\n this.enableLabelFilter = false;\n }\n if (this.museumCategorySelectedId == null) return this.mesum_antiques;else if (this.museumCategorySelectedId == this.mesumCategoryOptions.length - 1) {\n return this.mesum_antiques;\n } else {\n console.log(\"categoryId\", this.museumCategorySelectedId);\n return this.mesum_antiques.filter(item => {\n return item.category === this.mesumCategoryOptions[this.museumCategorySelectedId].label;\n });\n }\n },\n antiqueText() {\n return row => {\n const text = row.combined || \"\";\n if (text.length < 20) return text;else return text.substring(0, 20) + \"...\";\n };\n },\n orginTextGT400() {\n return row => {\n let result = false;\n if (!row.orgin_text) return false;\n if (row && row.combined.length > 400) result = true;\n if (row.orgin_text && row.combined && row.orgin_text.length !== row.combined.length) result = true;\n return result;\n };\n },\n // 判断当前行是否正在编辑\n isRowEditing() {\n return row => {\n return this.editingRow && this.editingRow.id === row.id;\n };\n }\n }\n});\n\n//# sourceURL=webpack://museum-admin/./src/components/ExhibitDetail.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/LocationManager.vue?vue&type=script&lang=js": /*!*************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/LocationManager.vue?vue&type=script&lang=js ***! \*************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _API_api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/API/api */ \"./src/API/api.js\");\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"LocationManager\",\n components: {},\n data() {\n return {\n activeNaviMenuIndex: '1',\n museumListData: [],\n tableHeight: 500,\n isWaveAnimating: true\n };\n },\n created() {},\n async mounted() {\n await this.getMesumList();\n this.updateTableHeight();\n // 监听窗口大小变化\n window.addEventListener('resize', this.updateTableHeight);\n },\n beforeUnmount() {\n // 组件销毁时移除监听\n window.removeEventListener('resize', this.updateTableHeight);\n },\n methods: {\n async getMesumList() {\n const data = await (0,_API_api__WEBPACK_IMPORTED_MODULE_3__.api_getMesumList)();\n if (data && Array.isArray(data) && data.length >= 1) {\n this.museumListData.splice(0, this.museumListData.length);\n this.museumListData.splice(0, 0, ...data);\n this.mesumSelected = data[0];\n this.mesumSelectedId = data[0].id;\n }\n console.log(data);\n },\n async getMesumAntiques(updateCategory) {\n const data = await (0,_API_api__WEBPACK_IMPORTED_MODULE_3__.api_getMesumAntiques)(this.mesumSelected.id);\n if (data) {\n console.log(data);\n const len = this.mesum_antiques.length;\n this.mesum_antiques.splice(0, len);\n this.mesum_antiques = data['anqituqes'];\n console.log(this.mesum_antiques);\n this.mesumCategoryOptions.splice(0, this.mesumCategoryOptions.length);\n if (data['categories'] && Array.isArray(data['categories'])) {\n const options = data['categories'].map((name, index) => {\n return {\n id: index,\n label: name\n };\n });\n options.push({\n id: options.length,\n label: \"全部\"\n });\n this.mesumCategoryOptions.splice(0, 0, ...options);\n if (options.length && updateCategory) {\n this.museumCategorySelectedId = this.mesumCategoryOptions[0].id;\n }\n }\n //this.updateFormContent(); //如果正在编辑,需要跟新对话框内容\n }\n },\n // eslint-disable-next-line no-unused-vars\n handleCurrentChange(value) {},\n // eslint-disable-next-line no-unused-vars\n editMuseumTrigger(row) {},\n // eslint-disable-next-line no-unused-vars\n removeMuseumInServer(row) {},\n updateTableHeight() {\n const titleRect = this.$refs.refTitle.getBoundingClientRect();\n this.tableHeight = window.innerHeight - titleRect.bottom - 16;\n }\n },\n watch: {},\n computed: {}\n});\n\n//# sourceURL=webpack://museum-admin/./src/components/LocationManager.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MarkdownEditor.vue?vue&type=script&lang=js": /*!************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MarkdownEditor.vue?vue&type=script&lang=js ***! \************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _API_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/API/api */ \"./src/API/api.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"MarkdownEditor\",\n props: {\n 'mesumSelectedId': {\n default: -1\n },\n 'mesumSelected': {},\n 'initData': {},\n 'visible': {\n default: false\n },\n 'photo_prefix': {\n default: 'temp'\n }\n },\n inject: {\n 'root': {\n default: null\n },\n 'getProject': {\n default: null\n },\n 'getSchedule': {\n default: null\n }\n },\n data() {\n return {\n formData: {\n mesum_id: 1,\n id: \"\",\n label: \"\",\n md_file_url: \"\",\n md_tts_url: \"\"\n },\n mdFile: null,\n mdContent: \"\",\n preview: {\n visible_md: false,\n downReady_md: false,\n audioSrc_md: '',\n tempBlob_md: null\n },\n uploadFile_md: null,\n result: {\n error: null,\n success: false,\n minioUrl: ''\n },\n isTTSGenerating: false,\n voiceSelected_md: \"sambert-zhichu-v1@Tongyi-Qianwen\",\n downloadFilename_md: \"md_tts.mp3\",\n voiceOptions: [{\n \"value\": \"cosyvoice-v1/longyuan@Tongyi-Qianwen\",\n \"label\": \"亲切女生\"\n }, {\n \"value\": \"sambert-zhiru-v1@Tongyi-Qianwen\",\n \"label\": \"新闻女生\"\n }, {\n \"value\": \"cosyvoice-v1/longhua@Tongyi-Qianwen\",\n \"label\": \"活泼女童\"\n }, {\n \"value\": \"cosyvoice-v1/longxiang@Tongyi-Qianwen\",\n \"label\": \"解说男声\"\n }, {\n \"value\": \"cosyvoice-v1/longyue@Tongyi-Qianwen\",\n \"label\": \"longyue\"\n }, {\n \"value\": \"cosyvoice-v1/longwan@Tongyi-Qianwen\",\n \"label\": \"longwan\"\n }, {\n \"value\": \"sambert-zhichu-v1@Tongyi-Qianwen\",\n \"label\": \"舌尖男声\"\n }, {\n \"value\": \"sambert-zhiying-v1@Tongyi-Qianwen\",\n \"label\": \"软萌童声\"\n }],\n dialogVisible: false,\n downloadStateMd: 'idle'\n };\n },\n created() {},\n mounted() {},\n methods: {\n // Markdown 文件选择\n handleMdFileChange(file) {\n this.mdFile = file.raw;\n console.log(\"选择的Markdown文件:\", file.name);\n },\n handleMdFileExceed(files) {\n this.$refs.uploadMdRef.clearFiles();\n const newFile = files[0];\n this.$refs.uploadMdRef.handleStart(newFile);\n this.handleMdFileChange({\n raw: newFile,\n name: newFile.name\n });\n },\n // 上传 Markdown 文件到 MinIO\n async submitMdFileUpload() {\n if (!this.mdFile) {\n this.$message.warning('请先选择Markdown文件');\n return;\n }\n try {\n // 如果已有MD文件,先删除旧的MinIO对象\n await this.removeMdFileFromMinio(this.formData.md_file_url);\n\n // 上传新文件\n const formData = new FormData();\n formData.append('file', this.mdFile);\n // 使用原始文件名,不重命名\n const fileName = this.mdFile.name;\n formData.append('bucket', _API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_md_bucket_name); // 使用专门的bucket存放markdown\n formData.append('file_name', `${this.photo_prefix}/category/${fileName}`);\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/minio/put`, {\n method: 'POST',\n body: formData,\n headers: {\n \"Authorization\": \"Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm\"\n }\n });\n if (!response.ok) {\n throw new Error('上传失败');\n }\n const res = await response.json();\n const {\n data\n } = res;\n if (data?.put) {\n // 更新数据库\n await this.updateAntiqueMdFile(data?.url);\n this.$message.success('Markdown文件上传成功');\n this.mdFile = null;\n if (this.$refs.uploadMdRef) {\n this.$refs.uploadMdRef.clearFiles();\n }\n }\n } catch (error) {\n console.error('上传Markdown文件失败:', error);\n this.$message.error('上传Markdown文件失败');\n }\n },\n // 读取 Markdown 文件内容\n async loadMdContent() {\n if (!this.formData.md_file_url) {\n this.$message.warning('没有Markdown文件URL');\n return;\n }\n try {\n const response = await fetch(this.formData.md_file_url);\n if (!response.ok) {\n throw new Error('读取文件失败');\n }\n const content = await response.text();\n this.mdContent = content;\n this.$message.success('Markdown内容加载成功');\n } catch (error) {\n console.error('读取Markdown内容失败:', error);\n this.$message.error('读取Markdown内容失败');\n }\n },\n // 从MD文件URL中删除MinIO对象(独立函数)\n async removeMdFileFromMinio(md_file_url) {\n if (!md_file_url || md_file_url === '') {\n return;\n }\n const urlParts = md_file_url.split(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_md_bucket_name}/`);\n if (urlParts.length > 1) {\n const fileName = urlParts[1];\n if (fileName && fileName !== \"\") {\n await this.removeMinioObject(_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_md_bucket_name, fileName);\n console.log('已删除Markdown文件:', fileName);\n }\n } else {\n // 兼容旧的URL格式或其他bucket\n const photoUrlParts = md_file_url.split(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_photo_bucket_name}/`);\n if (photoUrlParts.length > 1) {\n const fileName = photoUrlParts[1];\n if (fileName && fileName !== \"\") {\n await this.removeMinioObject(_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_photo_bucket_name, fileName);\n console.log('已删除Markdown文件(photo bucket):', fileName);\n }\n }\n }\n },\n // 删除 Markdown 文件URL\n async removeMdFileUrl() {\n this.$confirm('确认删除Markdown文件地址?').then(async () => {\n // 调用独立的删除函数\n await this.removeMdFileFromMinio(this.formData.md_file_url);\n await this.updateAntiqueMdFile(\"\");\n this.mdContent = \"\";\n this.$message.success('删除Markdown文件地址成功');\n }).catch(() => {});\n },\n // 更新数据库中的 md_file_url\n async updateAntiqueMdFile(md_file_url) {\n let antique_data = {\n mesum_id: this.mesumSelectedId,\n md_file_url: md_file_url\n };\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/mesum/antique/update/${this.formData.mesum_id}/${this.formData.id}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify(antique_data)\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.update) {\n this.formData.md_file_url = md_file_url;\n this.triggerRefreshAntiques();\n return true;\n }\n return false;\n },\n // 生成 Markdown TTS\n async generateMdTTS() {\n if (!this.mdContent || this.mdContent.length === 0) {\n this.$message.warning('Markdown内容为空,无法生成语音');\n return;\n }\n this.downloadFilename_md = 'md_tts_' + window.pinyin.getFullChars(this.formData.label) + '.mp3';\n try {\n this.isTTSGenerating = true;\n this.preview.audioSrc_md = null;\n this.preview.downReady_md = false;\n const wsUrl = `${_API_api__WEBPACK_IMPORTED_MODULE_1__.WEIXIN_WS_URL}/tts/chats/${_API_api__WEBPACK_IMPORTED_MODULE_1__.chatId}/tts/x-tts-type-is-TextToTts`;\n const ws = new WebSocket(wsUrl);\n let audioChunks = [];\n ws.onopen = () => {\n ws.send(JSON.stringify({\n service_type: \"TextToTts\",\n text: this.mdContent,\n params: {\n tts_stream_format: 'mp3',\n tts_sample_rate: 22050,\n model_name: this.voiceSelected_md,\n delay_gen_audio: true\n }\n }));\n };\n ws.onmessage = async event => {\n if (typeof event.data === 'string') {\n try {\n const message = JSON.parse(event.data);\n if (message.error) {\n this.showError(message.error);\n } else if (message.status === \"completed\") {\n ws.close();\n }\n } catch (e) {\n console.log(\"Non-JSON message:\", event.data);\n }\n } else {\n audioChunks.push(event.data);\n console.log(\"收到音频数据\", event.data.size);\n }\n };\n ws.onclose = () => {\n this.isTTSGenerating = false;\n if (audioChunks.length > 0) {\n const blob = new Blob(audioChunks, {\n type: 'audio/mpeg'\n });\n const url = URL.createObjectURL(blob);\n if (this.preview.audioSrc_md) {\n URL.revokeObjectURL(this.preview.audioSrc_md);\n }\n this.preview.audioSrc_md = url;\n this.preview.tempBlob_md = blob;\n this.preview.downReady_md = true;\n this.preview.visible_md = false;\n }\n };\n ws.onerror = error => {\n this.isTTSGenerating = false;\n this.showError(\"WebSocket连接错误: \" + error.message);\n };\n } catch (error) {\n this.isTTSGenerating = false;\n this.showError(error.message);\n }\n },\n // 下载 Markdown TTS\n downloadMdTTS() {\n this.downloadFile(this.preview.audioSrc_md, this.downloadFilename_md);\n },\n downloadFile(content, filename) {\n let blob = this.preview.tempBlob_md;\n this.downloadStateMd = \"download\";\n if (!blob) {\n this.showError(\"没有可下载的音频\");\n return;\n }\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n URL.revokeObjectURL(url);\n document.body.removeChild(a);\n this.preview.visible_md = true;\n this.downloadStateMd = \"finished\";\n this.resetDownloadState();\n },\n // 音色选择变化\n // eslint-disable-next-line no-unused-vars\n voiceSelectedChangeMd(value) {\n this.preview.visible_md = false;\n this.preview.audioSrc_md = \"\";\n },\n // 处理上传文件变化\n handleUploadChangeMd(file) {\n console.log(file);\n this.uploadFile_md = file.raw;\n },\n // 提交 TTS 上传\n submitMdTTSUpload() {\n const formData = new FormData();\n formData.append('file', this.uploadFile_md);\n formData.append('bucket', _API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_tts_bucket_name);\n formData.append('file_name', `${this.photo_prefix}/${this.uploadFileName_md}`);\n fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/minio/put`, {\n method: 'POST',\n body: formData,\n headers: {\n \"Authorization\": \"Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm\"\n }\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n }).then(res => {\n const {\n data\n } = res;\n if (data?.put) {\n this.updateAntiqueMdTts(data?.url);\n this.$message.success('上传成功');\n }\n }).catch(error => {\n console.error('上传失败:', error);\n this.$message.error('上传失败');\n });\n },\n // 删除 Markdown TTS URL\n async removeMdTtsUrl() {\n this.$confirm('确认删除Markdown TTS音频地址?').then(async () => {\n if (this.formData.md_tts_url && this.formData.md_tts_url !== '') {\n const urlParts = this.formData.md_tts_url.split(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_tts_bucket_name}/`);\n if (urlParts.length > 1) {\n const fileName = urlParts[1];\n if (fileName && fileName !== \"\") {\n await this.removeMinioObject(_API_api__WEBPACK_IMPORTED_MODULE_1__.exhibit_tts_bucket_name, fileName);\n }\n }\n }\n if (await this.updateAntiqueMdTts(\"\")) {\n this.$message('删除音频地址成功');\n } else {\n this.$message('删除音频地址失败');\n }\n }).catch(() => {});\n },\n // 更新数据库中的 md_tts_url\n async updateAntiqueMdTts(tts_url) {\n let antique_data = {\n mesum_id: this.mesumSelectedId,\n md_tts_url: tts_url\n };\n const response = await fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/mesum/antique/update/${this.formData.mesum_id}/${this.formData.id}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm'\n },\n body: JSON.stringify(antique_data)\n });\n const result = await response.json();\n const {\n data\n } = result;\n if (data && data.update) {\n this.formData.md_tts_url = tts_url;\n this.triggerRefreshAntiques();\n return true;\n }\n return false;\n },\n // 删除 MinIO 对象\n async removeMinioObject(bucket, fileName) {\n fetch(`${_API_api__WEBPACK_IMPORTED_MODULE_1__.BASE_API_URL}/minio/rm`, {\n method: 'POST',\n body: JSON.stringify({\n bucket: bucket,\n file_name: fileName\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": \"Bearer ragflow-NhZTY5Y2M4YWQ1MzExZWY4Zjc3MDI0Mm\"\n }\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n }).then(res => {\n const {\n data\n } = res;\n if (data?.rm) {\n console.log('删除MinIO对象成功');\n }\n }).catch(error => {\n console.error('删除minio object 失败:', error);\n });\n },\n resetDownloadState() {\n setTimeout(() => {\n this.downloadStateMd = 'idle';\n }, 3000);\n },\n showError(message) {\n this.result.error = message;\n this.result.success = false;\n setTimeout(() => this.result.error = null, 5000);\n },\n handleDialogClose(done) {\n const audioMd = this.$refs.audioPlayerMd;\n if (audioMd) {\n audioMd.pause();\n }\n done();\n this.closeDialog();\n },\n closeDialog() {\n this.dialogVisible = false;\n this.$emit(\"update:close\", true);\n },\n triggerRefreshAntiques() {\n this.$emit(\"update:refresh\", this.formData.id);\n }\n },\n watch: {\n visible: {\n handler(newVal) {\n this.dialogVisible = newVal;\n if (newVal) {\n this.formData = {\n ...this.formData,\n ...this.initData\n };\n this.mdContent = \"\";\n this.mdFile = null;\n this.downloadStateMd = 'idle';\n this.downloadFilename_md = 'md_tts_' + window.pinyin.getFullChars(this.formData.label || 'default') + '.mp3';\n }\n console.log(\"watch visible\", newVal, this.initData);\n },\n immediate: true\n },\n mesumSelectedId: {\n handler(newVal) {\n console.log(\"watch mesumSelectedId\", newVal);\n if (newVal == 2) {\n this.voiceSelected_md = \"sambert-zhichu-v1@Tongyi-Qianwen\";\n } else if (newVal == 1) {\n this.voiceSelected_md = \"cosyvoice-v1/longyuan@Tongyi-Qianwen\";\n } else {\n this.voiceSelected_md = \"sambert-zhichu-v1@Tongyi-Qianwen\";\n }\n },\n immediate: true\n }\n },\n computed: {\n uploadFileName_md() {\n if (this.uploadFile_md && this.uploadFile_md.name) return this.uploadFile_md.name;else return \"\";\n },\n downloadPromptMd() {\n if (this.downloadStateMd === 'idle') return \"\";\n if (this.downloadStateMd === 'download') return \"下载中...\";\n if (this.downloadStateMd === 'save') return \"存储中...\";\n if (this.downloadStateMd === 'finished') return \"完成\";\n return \"\";\n }\n }\n});\n\n//# sourceURL=webpack://museum-admin/./src/components/MarkdownEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MuseumSubscriptions.vue?vue&type=script&lang=js": /*!*****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MuseumSubscriptions.vue?vue&type=script&lang=js ***! \*****************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/core-js/modules/es.iterator.filter.js\");\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_reduce_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.reduce.js */ \"./node_modules/core-js/modules/es.iterator.reduce.js\");\n/* harmony import */ var core_js_modules_es_iterator_reduce_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_reduce_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _API_api_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/API/api.js */ \"./src/API/api.js\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"MuseumSubscriptions\",\n props: {\n 'museum_authed': {\n default: []\n },\n 'resource': {},\n 'mode': {},\n 'antiqueListData': {\n default: []\n }\n },\n inject: {\n 'root': {\n default: null\n },\n 'getProject': {\n default: null\n },\n 'getSchedule': {\n default: null\n }\n },\n components: {},\n data() {\n return {\n form: {\n action: \"update\",\n mesum_id: 1,\n id: \"\",\n text: '',\n label: \"\",\n category: \"\",\n voiceType: 'zh_male_ruyaqingnian_mars_bigtts',\n ttsUrl_cn: \"\",\n photoFileObject: null,\n formTitle: \"修改讲解点\"\n },\n upload: {\n minioPath: 'mp3',\n isUploading: false\n },\n uploadFile_adult: null,\n uploadFile_child: null,\n mesumOptions: [],\n mesumCategoryOptions: [],\n museumSubscriptions: [],\n antiqueSelectedRow: null,\n dialogVisible: false,\n mesumSelectedId: null,\n museumSelected: {\n id: 1\n },\n museumCategorySelectedId: null,\n currentDeviceList: [],\n deviceSelected: null,\n currentDeviceLogList: [],\n labelFilter: \"\",\n enableLabelFilter: false,\n tableHeight: 200,\n AiRefineDialogVisible: false,\n aiRefineForm: {\n id: \"\",\n text: '',\n aiOriginAntiqueDetailText: \"\"\n },\n labelToRefine: \"\"\n //\n };\n },\n created() {},\n async mounted() {\n await this.ConstructMuseumOptions(this.museum_authed);\n await this.getMuseumSubscriptions(this.museumSelected);\n // 初始获取高度\n this.updateTableHeight();\n // 监听窗口大小变化\n window.addEventListener('resize', this.updateTableHeight);\n },\n beforeUnmount() {\n // 组件销毁时移除监听\n window.removeEventListener('resize', this.updateTableHeight);\n },\n methods: {\n // eslint-disable-next-line no-unused-vars\n async mesumCategorySelectedChange(_value) {\n this.enableLabelFilter = false;\n },\n filterByLabel() {\n this.enableLabelFilter = true;\n },\n async museumSelectedChange(value) {\n this.form.mesum_id = value;\n this.museumSelected = this.mesumOptions.find(item => {\n return item.id === this.mesumSelectedId;\n });\n await this.getMuseumSubscriptions(this.museumSelected);\n },\n handleCurrentChange(val) {\n this.antiqueSelectedRow = val;\n // eslint-disable-next-line no-empty\n if (this.antiqueSelectedRow) {}\n },\n // eslint-disable-next-line no-unused-vars\n triggerAiRefine(row) {\n if (!row.orgin_text || row.orgin_text == \"\") {\n this.$message.error(\"没有找到原始的解说词,或者原始解说词为空\");\n return;\n }\n this.aiRefineForm.aiOriginAntiqueDetailText = row.orgin_text;\n this.aiRefineForm.id = row.id;\n this.aiRefineForm.label = row.label;\n this.aiRefineForm.mesum_id = this.mesumSelectedId;\n this.AiRefineDialogVisible = true;\n },\n async insertAntiqueTrigger() {},\n // eslint-disable-next-line no-unused-vars\n editAntiqueTrigger(row) {\n this.form.formTitle = \"修改讲解点\";\n this.uploadFile_adult = null;\n this.uploadFile_child = null;\n this.form.action = 'update';\n this.form.text = row.combined;\n this.form.label = row.label;\n this.form.category = row.category;\n this.form.id = row.id;\n this.form.ttsUrl_adult = row.ttsUrl_adult;\n this.form.ttsUrl_child = row.ttsUrl_child;\n this.form.photo_url = row.photo_url;\n this.form.photoFileObject = null;\n this.dialogVisible = true;\n console.log(\"editAntiqueTrigger\");\n },\n // eslint-disable-next-line no-unused-vars\n removeAntiqueInServer(row) {},\n updateTableHeight() {\n const titleRect = this.$refs.refTitle.getBoundingClientRect();\n this.tableHeight = window.innerHeight - titleRect.bottom - 16;\n },\n async ConstructMuseumOptions(data) {\n if (data && Array.isArray(data) && data.length >= 1) {\n this.mesumOptions = [];\n this.mesumOptions = data;\n this.museumSelected = data[0];\n this.mesumSelectedId = data[0].id;\n this.form.mesum_id = data[0].id;\n }\n console.log(data);\n },\n async getMuseumSubscriptions(museum) {\n // eslint-disable-next-line no-prototype-builtins\n if (museum && museum.hasOwnProperty('id')) {\n const data = await (0,_API_api_js__WEBPACK_IMPORTED_MODULE_4__.api_getSubscriptions)(museum.id);\n console.log(\"api_getSubscriptions \", data);\n if (data) {\n console.log(data);\n const len = this.museumSubscriptions.length;\n this.museumSubscriptions.splice(0, len);\n this.museumSubscriptions.splice(0, 0, ...data);\n console.log(this.museumSubscriptions);\n }\n }\n }\n },\n watch: {},\n computed: {\n rowSelected() {\n return row => {\n if (this.antiqueSelectedRow && this.antiqueSelectedRow.id == row.id) return true;else return false;\n };\n },\n ttsUrl_valid() {\n return url => {\n if (url && url !== '') return true;else return false;\n };\n },\n subscriptionsFiltered() {\n if (this.enableLabelFilter) {\n if (this.labelFilter && this.labelFilter !== '') {\n return this.museumSubscriptions.filter(item => {\n return item.label.includes(this.labelFilter);\n });\n } else\n // eslint-disable-next-line vue/no-side-effects-in-computed-properties\n this.enableLabelFilter = false;\n }\n if (this.museumCategorySelectedId == null) return this.museumSubscriptions;else if (this.museumCategorySelectedId == this.mesumCategoryOptions.length - 1) {\n return this.museumSubscriptions;\n } else {\n console.log(\"categoryId\", this.museumCategorySelectedId);\n return this.museumSubscriptions.filter(item => {\n return item.category === this.mesumCategoryOptions[this.museumCategorySelectedId].label;\n });\n }\n },\n totalAmount() {\n return parseFloat(this.subscriptionsFiltered.reduce((total, item) => total + Number(item.price), 0).toFixed(2));\n }\n }\n});\n\n//# sourceURL=webpack://museum-admin/./src/components/MuseumSubscriptions.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/NaviMenu.vue?vue&type=script&lang=js": /*!******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/NaviMenu.vue?vue&type=script&lang=js ***! \******************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"NaviMenu\",\n props: {\n 'task': {\n default: null\n },\n 'resource': {},\n 'mode': {},\n 'base': {\n default: 'jira'\n },\n 'menu_authed': [],\n 'defaultIndex': {\n default: '1'\n }\n },\n inject: {\n 'root': {\n default: null\n },\n 'getProject': {\n default: null\n },\n 'getSchedule': {\n default: null\n }\n },\n data() {\n return {\n activeNaviMenuIndex: '1',\n defaultActive: '1'\n };\n },\n created() {},\n mounted() {},\n methods: {\n // eslint-disable-next-line no-unused-vars\n handleMenuOpen(key, keyPath) {},\n // eslint-disable-next-line no-unused-vars\n handleMenuSelect(key, keyPath) {\n this.$emit(\"navi-menu-select\", key);\n this.activeNaviMenuIndex = key;\n if (key == '1') {\n this.$nextTick(() => {\n //this.updateTableHeight()\n });\n }\n }\n },\n watch: {\n defaultIndex: {\n handler(newVal) {\n console.log(\"NaviMenu watch defaultIndex\", newVal);\n this.defaultActive = newVal;\n },\n immediate: true\n }\n },\n computed: {\n hasSubscriptionsMenu() {\n if (this.menu_authed && this.menu_authed.includes('get_subscriptions')) return true;else return false;\n },\n hasDataAdminMenu() {\n if (this.menu_authed && this.menu_authed.includes('data_admin')) return true;else return false;\n },\n hasLocationMenu() {\n if (this.menu_authed && this.menu_authed.includes('location_admin')) return true;else return false;\n },\n hasDeviceMenu() {\n if (this.menu_authed && this.menu_authed.includes('device_admin')) return true;else return false;\n }\n }\n});\n\n//# sourceURL=webpack://museum-admin/./src/components/NaviMenu.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/UserLogin.vue?vue&type=script&lang=js": /*!*******************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/UserLogin.vue?vue&type=script&lang=js ***! \*******************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _API_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/API/api.js */ \"./src/API/api.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n props: {\n 'loginDialogVisible': {\n default: true\n },\n 'initData': {\n username: \"\",\n password: \"\"\n }\n },\n data() {\n return {\n dialogVisible: false,\n form: {\n username: '',\n password: ''\n },\n availableUser: [{\n name: '语料管理',\n value: '15901055018'\n }, {\n name: '纪晓岚馆方',\n value: '19967851231'\n }, {\n name: '系统管理员',\n value: '18676776176'\n }],\n passwordinputtype: 'text',\n showPwd: false\n };\n },\n methods: {\n cancelLogin() {\n this.$emit('login-event', \"cancel-login\", null);\n },\n handleLogin() {\n this.$refs.loginForm.validate(valid => {\n if (valid) {\n (0,_API_api_js__WEBPACK_IMPORTED_MODULE_0__.account_login)({\n user: this.form.username,\n password: this.form.password\n }).then(response => {\n response = response.data || response;\n if (response.status === 'success') {\n this.$emit(\"confirm-login\", response);\n this.$message({\n type: 'success',\n message: '登录成功!'\n });\n } else {\n this.$message({\n type: 'error',\n message: '用户名或者密码错误!'\n });\n }\n });\n }\n });\n },\n hiddenPwd() {\n this.showPwd = !this.showPwd; // 默认为false\n if (this.showPwd) {\n document.getElementsByClassName('pwd')[0].style.webkitTextSecurity = 'none';\n } else {\n document.getElementsByClassName('pwd')[0].style.webkitTextSecurity = 'disc';\n }\n }\n },\n watch: {\n loginDialogVisible: {\n handler(newVal) {\n console.log(\"UserLogin watch loginDialogVisible\", newVal);\n this.dialogVisible = newVal;\n if (newVal) {\n this.formData = {\n ...this.formData,\n ...this.initData\n };\n this.downloadStateAdult = 'idle';\n this.downloadStateChild = 'idle';\n }\n },\n immediate: true\n }\n },\n mounted() {},\n created() {\n console.log(\"user login created\");\n }\n});\n\n//# sourceURL=webpack://museum-admin/./src/components/UserLogin.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=template&id=7ba5bd90": /*!******************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=template&id=7ba5bd90 ***! \******************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n id: \"mainContainer\",\n class: \"container\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_navi_menu = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"navi-menu\");\n const _component_exhibit_detail = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"exhibit-detail\");\n const _component_device_monitor = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"device-monitor\");\n const _component_location_manager = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"location-manager\");\n const _component_museum_subscriptions = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"museum-subscriptions\");\n const _component_user_login = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"user-login\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [$data.isAuthed ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_navi_menu, {\n key: 0,\n menu_authed: $data.menu_authed,\n onNaviMenuSelect: $options.naviMenuSelect,\n defaultIndex: $data.defaultActive\n }, null, 8 /* PROPS */, [\"menu_authed\", \"onNaviMenuSelect\", \"defaultIndex\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $data.activeMenuIndex === '1' && $data.isAuthed && $options.hasDataAdminMenu ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_exhibit_detail, {\n key: 1,\n museumListData: $data.museumListData,\n antiqueListData: $data.museumAntiqueListData\n }, null, 8 /* PROPS */, [\"museumListData\", \"antiqueListData\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $data.activeMenuIndex === '2' && $data.isAuthed && $options.hasDeviceMenu ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_device_monitor, {\n key: 2\n })) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $data.activeMenuIndex === '3' && $data.isAuthed && $options.hasLocationMenu ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_location_manager, {\n key: 3\n })) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $data.activeMenuIndex === '4' && $data.isAuthed && $options.hasSubscriptionsMenu ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_museum_subscriptions, {\n key: 4,\n museum_authed: $data.museum_authed\n }, null, 8 /* PROPS */, [\"museum_authed\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), !$data.isAuthed ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_user_login, {\n key: 5,\n loginDialogVisible: !$data.isAuthed,\n onConfirmLogin: $options.confirmLogin\n }, null, 8 /* PROPS */, [\"loginDialogVisible\", \"onConfirmLogin\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/App.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AiTextEditor.vue?vue&type=template&id=0e5ef672&scoped=true": /*!**************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AiTextEditor.vue?vue&type=template&id=0e5ef672&scoped=true ***! \**************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n style: {\n \"width\": \"58vw\"\n },\n \"element-loading-text\": \"Ai 整理中...\"\n};\nconst _hoisted_2 = {\n style: {\n \"width\": \"58vw\",\n \"height\": \"5vh\",\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"justify-content\": \"space-between\",\n \"align-items\": \"center\",\n \"margin-bottom\": \"2vh\"\n }\n};\nconst _hoisted_3 = {\n style: {\n \"width\": \"58vw\",\n \"height\": \"5vh\",\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"justify-content\": \"space-between\",\n \"align-items\": \"center\",\n \"margin-top\": \"3vh\"\n }\n};\nconst _hoisted_4 = {\n style: {\n \"margin-top\": \"10px\",\n \"margin-bottom\": \"10px\",\n \"color\": \"blue\"\n }\n};\nconst _hoisted_5 = {\n style: {\n \"width\": \"98%\",\n \"height\": \"25vh\",\n \"max-height\": \"25vh\",\n \"overflow-y\": \"auto\",\n \"border\": \"1px solid lightgray\"\n }\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_option = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-option\");\n const _component_el_select = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-select\");\n const _component_el_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-button\");\n const _component_el_input = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-input\");\n const _component_el_dialog = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-dialog\");\n const _directive_loading = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDirective)(\"loading\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_dialog, {\n title: $data.formData.formTitle,\n modelValue: $data.dialogVisible,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.dialogVisible = $event),\n width: \"60%\",\n \"align-center\": \"\",\n \"before-close\": $options.handleDialogClose\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)(((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.aiRefineDetailMaxWords,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.aiRefineDetailMaxWords = $event),\n clearable: \"\",\n placeholder: \"请选择最大字数\",\n style: {\n \"width\": \"140px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.detialMaxWordsOptions, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.value,\n label: item.label,\n value: item.value\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(`整理后${$data.formData.aiRefinedAntiqueDetialText.length}字`), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.label), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n style: {\n \"margin-right\": \"50px\"\n },\n type: \"primary\",\n onClick: $options.refineAntiqueDetailText\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[3] || (_cache[3] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"开始\")])),\n _: 1 /* STABLE */,\n __: [3]\n }, 8 /* PROPS */, [\"onClick\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n type: \"textarea\",\n rows: 8,\n placeholder: \"支持多行输入\",\n modelValue: $data.formData.aiRefinedAntiqueDetialText,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.formData.aiRefinedAntiqueDetialText = $event),\n style: {\n \"width\": \"56vw\"\n }\n }, null, 8 /* PROPS */, [\"modelValue\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n style: {\n \"margin-left\": \"50px\"\n },\n onClick: $options.closeDialog\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[4] || (_cache[4] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"取消修改\")])),\n _: 1 /* STABLE */,\n __: [4]\n }, 8 /* PROPS */, [\"onClick\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n style: {\n \"margin-right\": \"50px\"\n },\n type: \"primary\",\n onClick: $options.handleConfirmCommitAiRefinedText\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[5] || (_cache[5] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"确定修改\")])),\n _: 1 /* STABLE */,\n __: [5]\n }, 8 /* PROPS */, [\"onClick\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(`原始文本,共${$data.formData.aiOriginAntiqueDetailText.length}字`), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.aiOriginAntiqueDetailText), 1 /* TEXT */)])), [[_directive_loading, $data.aiRefining]])]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"title\", \"modelValue\", \"before-close\"]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/components/AiTextEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DetailEditor.vue?vue&type=template&id=9a748b64&scoped=true": /*!**************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DetailEditor.vue?vue&type=template&id=9a748b64&scoped=true ***! \**************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"input-section\"\n};\nconst _hoisted_2 = {\n class: \"form-group\"\n};\nconst _hoisted_3 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_4 = {\n style: {\n \"display\": \"inline-block\",\n \"width\": \"60px\",\n \"margin-left\": \"10px\"\n }\n};\nconst _hoisted_5 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_6 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\",\n \"margin-right\": \"10px\"\n }\n};\nconst _hoisted_7 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\",\n \"margin-right\": \"10px\"\n }\n};\nconst _hoisted_8 = {\n style: {\n \"width\": \"100%\",\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_9 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\",\n \"margin-left\": \"12px\",\n \"margin-right\": \"12px\"\n }\n};\nconst _hoisted_10 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"column\",\n \"align-items\": \"center\",\n \"justify-content\": \"center\"\n }\n};\nconst _hoisted_11 = {\n style: {\n \"width\": \"92%\",\n \"height\": \"21vh\",\n \"margin\": \"1px\"\n }\n};\nconst _hoisted_12 = [\"src\"];\nconst _hoisted_13 = {\n class: \"preview-actions\"\n};\nconst _hoisted_14 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"align-items\": \"center\",\n \"justify-content\": \"flex-start\",\n \"margin-top\": \"20px\"\n }\n};\nconst _hoisted_15 = {\n style: {\n \"display\": \"inline-block\",\n \"width\": \"1000px\"\n }\n};\nconst _hoisted_16 = [\"href\"];\nconst _hoisted_17 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_18 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_19 = [\"src\"];\nconst _hoisted_20 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_21 = {\n style: {\n \"width\": \"90%\",\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_22 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_23 = {\n style: {\n \"display\": \"inline-block\",\n \"width\": \"100px\"\n }\n};\nconst _hoisted_24 = {\n class: \"upload-section\"\n};\nconst _hoisted_25 = {\n style: {\n \"margin-left\": \"10px\",\n \"width\": \"100%\",\n \"height\": \"5vh\",\n \"display\": \"flex\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_26 = {\n style: {\n \"display\": \"inline-block\",\n \"width\": \"200px\"\n }\n};\nconst _hoisted_27 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"align-items\": \"center\",\n \"justify-content\": \"flex-start\",\n \"margin-top\": \"20px\"\n }\n};\nconst _hoisted_28 = {\n style: {\n \"display\": \"inline-block\",\n \"width\": \"1000px\"\n }\n};\nconst _hoisted_29 = [\"href\"];\nconst _hoisted_30 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_31 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_32 = [\"src\"];\nconst _hoisted_33 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_34 = {\n style: {\n \"width\": \"90%\",\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_35 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_36 = {\n style: {\n \"display\": \"inline-block\",\n \"width\": \"100px\"\n }\n};\nconst _hoisted_37 = {\n class: \"upload-section\"\n};\nconst _hoisted_38 = {\n style: {\n \"margin-left\": \"10px\",\n \"width\": \"100%\",\n \"height\": \"5vh\",\n \"display\": \"flex\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_39 = {\n style: {\n \"display\": \"inline-block\",\n \"width\": \"200px\"\n }\n};\nconst _hoisted_40 = {\n class: \"result-section\"\n};\nconst _hoisted_41 = {\n key: 0,\n class: \"error-message\"\n};\nconst _hoisted_42 = {\n key: 1,\n class: \"success-message\"\n};\nconst _hoisted_43 = [\"href\"];\nconst _hoisted_44 = {\n class: \"flex-row\"\n};\nconst _hoisted_45 = [\"src\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-input\");\n const _component_el_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-button\");\n const _component_el_col = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-col\");\n const _component_el_upload = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-upload\");\n const _component_el_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-row\");\n const _component_el_option = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-option\");\n const _component_el_select = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-select\");\n const _component_el_dialog = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-dialog\");\n const _directive_loading = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDirective)(\"loading\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_dialog, {\n title: $data.formData.formTitle,\n modelValue: $data.dialogVisible,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.dialogVisible = $event),\n width: \"85%\",\n \"align-center\": \"\",\n \"before-close\": $options.handleDialogClose\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_row, null, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 16,\n style: {\n \"height\": \"30vh\",\n \"border\": \"1px solid lightgray\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_4, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.id), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, [_cache[22] || (_cache[22] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"标题:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n modelValue: $data.formData.label,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.formData.label = $event),\n style: {\n \"width\": \"250px\"\n }\n }, null, 8 /* PROPS */, [\"modelValue\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_6, [_cache[23] || (_cache[23] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"目录:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n modelValue: $data.formData.category,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.formData.category = $event),\n style: {\n \"width\": \"200px\"\n }\n }, null, 8 /* PROPS */, [\"modelValue\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_7, [_cache[24] || (_cache[24] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"二级目录:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n modelValue: $data.formData.category_l2,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.formData.category_l2 = $event),\n style: {\n \"width\": \"150px\"\n }\n }, null, 8 /* PROPS */, [\"modelValue\"])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"textarea\", {\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.formData.text = $event),\n rows: \"8\",\n required: \"\",\n style: {\n \"width\": \"96%\"\n }\n }, null, 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $data.formData.text]]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_8, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_9, [_cache[25] || (_cache[25] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"tags:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n modelValue: $data.formData.tags,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.formData.tags = $event),\n style: {\n \"width\": \"250px\"\n }\n }, null, 8 /* PROPS */, [\"modelValue\"])]), $data.formData.action == 'update' ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: _cache[5] || (_cache[5] = $event => $options.submitUpdateAntique($data.formData))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[26] || (_cache[26] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"修改文字部分内容(标题、目录、讲解词)\")])),\n _: 1 /* STABLE */,\n __: [26]\n })) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $data.formData.action == 'insert' ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_button, {\n key: 1,\n type: \"primary\",\n onClick: $options.submitInsertAntique\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[27] || (_cache[27] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"新增此条讲解\")])),\n _: 1 /* STABLE */,\n __: [27]\n }, 8 /* PROPS */, [\"onClick\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 8,\n style: {\n \"height\": \"30vh\",\n \"border\": \"1px solid lightgray\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_11, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"img\", {\n src: $options.exhibitPhotoPreviewUrl,\n style: {\n \"width\": \"100%\",\n \"height\": \"20vh\"\n }\n }, null, 8 /* PROPS */, _hoisted_12), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"preview-action\",\n onClick: _cache[6] || (_cache[6] = $event => $options.handlePhotoPreview($data.formData.photoFileObject))\n }, _cache[28] || (_cache[28] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"el-icon-zoom-in\"\n }, null, -1 /* HOISTED */)]))])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_upload, {\n ref: \"uploadPhotoRef\",\n action: \"\",\n \"auto-upload\": false,\n limit: 1,\n \"file-list\": $data.photoFileList,\n \"on-change\": $options.handleUploadExhibitPhotoChange,\n \"on-exceed\": $options.handlePhotoExceed,\n \"show-file-list\": false,\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"padding\": \"2px\",\n \"margin\": \"2px\"\n },\n accept: \".jpg,.jpeg,.png\"\n }, {\n trigger: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n size: \"small\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[29] || (_cache[29] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"选取文件\")])),\n _: 1 /* STABLE */,\n __: [29]\n })]),\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n style: {\n \"margin-left\": \"10px\"\n },\n size: \"small\",\n onClick: _cache[7] || (_cache[7] = $event => $options.submitPhotoUpload($data.formData.photoFileObject))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[30] || (_cache[30] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"上传并修改\")])),\n _: 1 /* STABLE */,\n __: [30]\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n style: {\n \"margin-left\": \"10px\"\n },\n size: \"small\",\n type: \"danger\",\n onClick: _cache[8] || (_cache[8] = $event => $options.handleRemovePhotoUrl($data.formData.photoFileObject))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[31] || (_cache[31] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"删除图片地址\")])),\n _: 1 /* STABLE */,\n __: [31]\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"file-list\", \"on-change\", \"on-exceed\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.photo_url), 1 /* TEXT */)])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n })]), _cache[48] || (_cache[48] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\",\n \"color\": \"blue\"\n }\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, \"成年声\"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, \"儿童声\")], -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)(((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_row, {\n \"element-loading-text\": \"音频生成中...\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 12,\n style: {\n \"border\": \"1px solid gray\",\n \"padding-right\": \"5px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_14, [_cache[33] || (_cache[33] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"margin-right\": \"20px\",\n \"display\": \"inline-block\",\n \"width\": \"200px\"\n }\n }, \"讲解音频地址:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n href: $data.result.minioUrl,\n target: \"_blank\"\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.ttsUrl_adult), 9 /* TEXT, PROPS */, _hoisted_16)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"danger\",\n style: {\n \"width\": \"200px\"\n },\n size: \"default\",\n onClick: _cache[9] || (_cache[9] = $event => $options.removeAntiqueTts('adult'))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[32] || (_cache[32] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"删除音频地址\")])),\n _: 1 /* STABLE */,\n __: [32]\n })]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_17, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_18, [_cache[34] || (_cache[34] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", null, \"音色选择:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.voiceSelected_adult,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.voiceSelected_adult = $event),\n clearable: \"\",\n placeholder: \"请选择音色\",\n onChange: $options.voiceSelectedChangeAdult,\n \"allow-create\": \"\",\n \"default-first-option\": \"\",\n style: {\n \"width\": \"140px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.voiceOptions, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.value,\n label: item.label,\n value: item.value\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\", \"onChange\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n onClick: _cache[11] || (_cache[11] = $event => $options.generateTTS('adult'))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[35] || (_cache[35] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"生成语音\")])),\n _: 1 /* STABLE */,\n __: [35]\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"audio\", {\n class: \"audio-player\",\n ref: \"audioPlayerAdult\",\n src: $data.preview.audioSrc_adult,\n controls: \"\"\n }, null, 8 /* PROPS */, _hoisted_19), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n disabled: !$data.preview.downReady_adult,\n onClick: _cache[12] || (_cache[12] = $event => $options.downloadTTS('adult'))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[36] || (_cache[36] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"下载语音\")])),\n _: 1 /* STABLE */,\n __: [36]\n }, 8 /* PROPS */, [\"disabled\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_20, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_21, [_cache[37] || (_cache[37] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"下载文件名\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n modelValue: $data.downloadFilename_adult,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.downloadFilename_adult = $event)\n }, null, 8 /* PROPS */, [\"modelValue\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_22, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_23, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.downloadPromptAdult), 1 /* TEXT */)])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" 预览区域 \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_24, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_row, {\n align: \"middle\",\n style: {\n \"height\": \"5vh\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 14\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_25, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_upload, {\n action: \"\",\n \"auto-upload\": false,\n \"on-change\": $options.handleUploadChangeAdult,\n \"show-file-list\": false,\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\"\n }\n }, {\n trigger: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[38] || (_cache[38] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"选取文件\")])),\n _: 1 /* STABLE */,\n __: [38]\n })]),\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_26, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.uploadFileName('adult')), 1 /* TEXT */)]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"on-change\"])])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 8\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n disabled: !$data.uploadFile_adult,\n style: {\n \"width\": \"90%\"\n },\n size: \"default\",\n type: \"success\",\n onClick: _cache[14] || (_cache[14] = $event => $options.submitTTSUpload('adult'))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[39] || (_cache[39] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 上传并修改音频地址 \")])),\n _: 1 /* STABLE */,\n __: [39]\n }, 8 /* PROPS */, [\"disabled\"])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.preview.visible_adult]])])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 12,\n style: {\n \"border\": \"1px solid gray\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_27, [_cache[41] || (_cache[41] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"margin-right\": \"20px\",\n \"display\": \"inline-block\",\n \"width\": \"200px\"\n }\n }, \"讲解音频地址:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_28, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n href: $data.result.minioUrl,\n target: \"_blank\"\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.ttsUrl_child), 9 /* TEXT, PROPS */, _hoisted_29)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"danger\",\n style: {\n \"width\": \"200px\"\n },\n size: \"default\",\n onClick: _cache[15] || (_cache[15] = $event => $options.removeAntiqueTts('child'))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[40] || (_cache[40] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"删除音频地址\")])),\n _: 1 /* STABLE */,\n __: [40]\n })]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_30, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_31, [_cache[42] || (_cache[42] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", null, \"音色选择:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.voiceSelected_child,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.voiceSelected_child = $event),\n clearable: \"\",\n placeholder: \"请选择音色\",\n onChange: $options.voiceSelectedChangeChild,\n \"allow-create\": \"\",\n \"default-first-option\": \"\",\n style: {\n \"width\": \"140px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.voiceOptions, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.value,\n label: item.label,\n value: item.value\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\", \"onChange\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n onClick: _cache[17] || (_cache[17] = $event => $options.generateTTS('child'))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[43] || (_cache[43] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"生成语音\")])),\n _: 1 /* STABLE */,\n __: [43]\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"audio\", {\n class: \"audio-player\",\n ref: \"audioPlayerChild\",\n src: $data.preview.audioSrc_child,\n controls: \"\"\n }, null, 8 /* PROPS */, _hoisted_32), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n disabled: !$data.preview.downReady_child,\n onClick: _cache[18] || (_cache[18] = $event => $options.downloadTTS('child'))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[44] || (_cache[44] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"下载语音\")])),\n _: 1 /* STABLE */,\n __: [44]\n }, 8 /* PROPS */, [\"disabled\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_33, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_34, [_cache[45] || (_cache[45] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"下载文件名\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n modelValue: $data.downloadFilename_child,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.downloadFilename_child = $event)\n }, null, 8 /* PROPS */, [\"modelValue\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_35, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_36, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.downloadPromptChild), 1 /* TEXT */)])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" 预览区域 \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_37, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_row, {\n align: \"middle\",\n style: {\n \"height\": \"5vh\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 14\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_38, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_upload, {\n action: \"\",\n \"auto-upload\": false,\n \"on-change\": $options.handleUploadChangeChild,\n \"show-file-list\": false,\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\"\n }\n }, {\n trigger: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[46] || (_cache[46] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"选取文件\")])),\n _: 1 /* STABLE */,\n __: [46]\n })]),\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_39, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.uploadFileName('child')), 1 /* TEXT */)]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"on-change\"])])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 8\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n disabled: !$data.uploadFile_child,\n style: {\n \"width\": \"90%\"\n },\n size: \"default\",\n type: \"success\",\n onClick: _cache[20] || (_cache[20] = $event => $options.submitTTSUpload('child'))\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[47] || (_cache[47] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 上传并修改音频地址 \")])),\n _: 1 /* STABLE */,\n __: [47]\n }, 8 /* PROPS */, [\"disabled\"])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.preview.visible_child]])])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n })), [[_directive_loading, $data.isTTSGenerating]])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" 结果展示 \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_40, [$data.result.error ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_41, \" 错误:\" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.result.error), 1 /* TEXT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $data.result.success ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_42, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"p\", null, [_cache[49] || (_cache[49] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"上传成功!访问地址: \")), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"a\", {\n href: $data.result.minioUrl,\n target: \"_blank\"\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.result.minioUrl), 9 /* TEXT, PROPS */, _hoisted_43)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_44, [_cache[50] || (_cache[50] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"h4\", null, \"在线播放:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"audio\", {\n src: $data.result.minioUrl,\n controls: \"\"\n }, null, 8 /* PROPS */, _hoisted_45)], 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.result.minioUrl]])])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"title\", \"modelValue\", \"before-close\"]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/components/DetailEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DeviceMonitor.vue?vue&type=template&id=379ddc24&scoped=true": /*!***************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DeviceMonitor.vue?vue&type=template&id=379ddc24&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"content-container\"\n};\nconst _hoisted_2 = {\n class: \"device-list-container\"\n};\nconst _hoisted_3 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\"\n }\n};\nconst _hoisted_4 = {\n class: \"device-list-device\"\n};\nconst _hoisted_5 = [\"onClick\"];\nconst _hoisted_6 = {\n class: \"device-list-container\"\n};\nconst _hoisted_7 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_8 = {\n class: \"device-log-list\"\n};\nconst _hoisted_9 = {\n style: {\n \"margin-top\": \"5px\"\n }\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_option = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-option\");\n const _component_el_select = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-select\");\n const _component_el_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-button\");\n const _component_el_col = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-col\");\n const _component_el_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-row\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [_cache[4] || (_cache[4] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n style: {\n \"width\": \"20vw\",\n \"display\": \"flex\",\n \"justify-content\": \"center\"\n }\n }, \"设备日志管理\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_row, {\n class: \"device-log-container\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 8\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.mesumSelectedId,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.mesumSelectedId = $event),\n clearable: \"\",\n placeholder: \"请选择博物馆\",\n onChange: $options.mesumSelectedChange,\n \"default-first-option\": \"\",\n style: {\n \"width\": \"160px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.mesumOptions, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.id,\n label: item.name,\n value: item.id\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\", \"onChange\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n onClick: $options.refreshDeviceList,\n size: \"default\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[1] || (_cache[1] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"刷新设备列表\")])),\n _: 1 /* STABLE */,\n __: [1]\n }, 8 /* PROPS */, [\"onClick\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.currentDeviceList, (device, index) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: index,\n class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)($options.deviceIsSelected(device.device_id) ? 'device-item device-item-selected' : 'device-item'),\n onClick: $event => $options.deviceClick(device)\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(device.device_id), 11 /* TEXT, CLASS, PROPS */, _hoisted_5);\n }), 128 /* KEYED_FRAGMENT */))])])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 6\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_6, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_7, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n disabled: true\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[2] || (_cache[2] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"log文件列表\")])),\n _: 1 /* STABLE */,\n __: [2]\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.deviceSelected?.device_sn), 1 /* TEXT */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_8, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.currentDeviceLogList, (item, index) => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: index,\n class: \"log-file-item\"\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_9, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(item), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n size: \"default\",\n style: {\n \"width\": \"10vw\",\n \"margin-bottom\": \"5px\"\n },\n onClick: $event => $options.downloadLogFile(item)\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [...(_cache[3] || (_cache[3] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"下载\")]))]),\n _: 2 /* DYNAMIC */,\n __: [3]\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"onClick\"])]);\n }), 128 /* KEYED_FRAGMENT */))])])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 10\n })]),\n _: 1 /* STABLE */\n })]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/components/DeviceMonitor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ExhibitDetail.vue?vue&type=template&id=7b7d2c4a&scoped=true": /*!***************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ExhibitDetail.vue?vue&type=template&id=7b7d2c4a&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"content-container\"\n};\nconst _hoisted_2 = {\n class: \"title\",\n ref: \"refTitle\"\n};\nconst _hoisted_3 = {\n class: \"flex-row\"\n};\nconst _hoisted_4 = {\n class: \"flex-row\"\n};\nconst _hoisted_5 = {\n class: \"editable-cell\"\n};\nconst _hoisted_6 = [\"onClick\"];\nconst _hoisted_7 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"column\",\n \"align-items\": \"center\",\n \"justify-content\": \"flex-start\"\n }\n};\nconst _hoisted_8 = {\n key: 0\n};\nconst _hoisted_9 = {\n key: 1,\n style: {\n \"color\": \"blue\"\n }\n};\nconst _hoisted_10 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"column\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_11 = [\"src\"];\nconst _hoisted_12 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"column\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_13 = [\"src\"];\nconst _hoisted_14 = {\n key: 0,\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nconst _hoisted_15 = {\n key: 1,\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_option = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-option\");\n const _component_el_select = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-select\");\n const _component_el_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-button\");\n const _component_el_input = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-input\");\n const _component_el_table_column = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-table-column\");\n const _component_el_popover = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-popover\");\n const _component_el_table = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-table\");\n const _component_el_col = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-col\");\n const _component_el_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-row\");\n const _component_detail_editor = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"detail-editor\");\n const _component_ai_text_editor = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"ai-text-editor\");\n const _component_markdown_editor = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"markdown-editor\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.museumCategorySelectedId,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.museumCategorySelectedId = $event),\n clearable: \"\",\n placeholder: \"请选择目录\",\n onChange: $options.mesumCategorySelectedChange,\n style: {\n \"width\": \"140px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.mesumCategoryOptions, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.id,\n label: item.label,\n value: item.id\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\", \"onChange\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n placeholder: \"请输入标题搜索\",\n modelValue: $data.labelFilter,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.labelFilter = $event),\n clearable: \"\",\n style: {\n \"width\": \"200px\"\n }\n }, {\n append: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n icon: \"el-icon-search\",\n onClick: $options.filterByLabel\n }, null, 8 /* PROPS */, [\"onClick\"])]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"]), _cache[8] || (_cache[8] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"h3\", null, \"讲解点查看与修改\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.antiqueFiltered.length), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n round: \"\",\n type: \"primary\",\n size: \"medium\",\n onClick: $options.insertAntiqueTrigger\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[7] || (_cache[7] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"增加\")])),\n _: 1 /* STABLE */,\n __: [7]\n }, 8 /* PROPS */, [\"onClick\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.mesumSelectedId,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.mesumSelectedId = $event),\n clearable: \"\",\n placeholder: \"请选择博物馆\",\n onChange: $options.mesumSelectedChange,\n \"default-first-option\": \"\",\n style: {\n \"width\": \"140px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.mesumOptions, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.id,\n label: item.name,\n value: item.id\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\", \"onChange\"])])], 512 /* NEED_PATCH */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_row, null, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 24\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table, {\n data: $options.antiqueFiltered,\n border: \"\",\n height: $data.tableHeight,\n \"highlight-current-row\": \"\",\n style: {\n \"width\": \"100%\"\n },\n onCurrentChange: $options.handleCurrentChange\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"id\",\n label: \"编号\",\n width: \"100\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"sort_order\",\n label: \"序号\",\n width: \"120\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(scope => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, [!$options.isRowEditing(scope.row) ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", {\n key: 0,\n class: \"display-value\",\n onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => $options.startRowEdit(scope.row), [\"stop\"])\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(scope.row.sort_order), 9 /* TEXT, PROPS */, _hoisted_6)) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_input, {\n key: 1,\n modelValue: $data.editingRowData.sort_order,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.editingRowData.sort_order = $event),\n modelModifiers: {\n number: true\n },\n type: \"number\",\n size: \"mini\",\n class: \"edit-input\",\n onKeyup: [(0,vue__WEBPACK_IMPORTED_MODULE_0__.withKeys)($options.saveRowEdit, [\"enter\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withKeys)($options.cancelRowEdit, [\"esc\"])]\n }, null, 8 /* PROPS */, [\"modelValue\", \"onKeyup\"]))])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"label\",\n label: \"标题\",\n width: \"150\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"category\",\n label: \"目录\",\n width: \"260\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"combined\",\n label: \"解说词\",\n width: \"350\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(scope => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_7, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_popover, {\n placement: \"top-start\",\n title: \"详细内容\",\n width: \"600\",\n trigger: \"click\",\n content: scope.row.combined\n }, {\n reference: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.antiqueText(scope.row)), 1 /* TEXT */)]),\n _: 2 /* DYNAMIC */\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"content\"]), $options.orginTextGT400 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_8, [scope.row.combined.length > 400 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_button, {\n key: 0,\n size: \"small\",\n onClick: $event => $options.triggerAiRefine(scope.row),\n style: {\n \"margin-top\": \"10px\",\n \"border\": \"1px solid lightblue\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)((0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(`共${scope.row.combined.length}大于400字-->AI整理`), 1 /* TEXT */)]),\n _: 2 /* DYNAMIC */\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"onClick\"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), scope.row.orgin_text && Math.abs(scope.row.orgin_text.length - scope.row.combined.length) > 20 ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_9, \"经过整理\")) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"ttsUrl_adult\",\n label: \"音频地址(成年)\",\n width: \"300\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(scope => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(scope.row.ttsUrl_adult), 1 /* TEXT */)]), $options.rowSelected(scope.row) && $options.ttsUrl_valid(scope.row.ttsUrl_adult) ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"audio\", {\n key: 0,\n class: \"audio-player\",\n src: scope.row.ttsUrl_adult,\n controls: \"\"\n }, null, 8 /* PROPS */, _hoisted_11)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"ttsUrl_child\",\n label: \"音频地址(童声)\",\n width: \"300\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(scope => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_12, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(scope.row.ttsUrl_child), 1 /* TEXT */)]), $options.rowSelected(scope.row) && $options.ttsUrl_valid(scope.row.ttsUrl_child) ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"audio\", {\n key: 0,\n class: \"audio-player\",\n src: scope.row.ttsUrl_child,\n controls: \"\"\n }, null, 8 /* PROPS */, _hoisted_13)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n fixed: \"right\",\n label: \"操作\",\n width: \"220\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(scope => [$options.isRowEditing(scope.row) ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n size: \"small\",\n type: \"success\",\n onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($options.saveRowEdit, [\"stop\"])\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[9] || (_cache[9] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 保存 \")])),\n _: 1 /* STABLE */,\n __: [9]\n }, 8 /* PROPS */, [\"onClick\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n size: \"small\",\n onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($options.cancelRowEdit, [\"stop\"])\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[10] || (_cache[10] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 取消 \")])),\n _: 1 /* STABLE */,\n __: [10]\n }, 8 /* PROPS */, [\"onClick\"])])) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_15, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => $options.editAntiqueTrigger(scope.row), [\"stop\"])\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[11] || (_cache[11] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"编辑\")])),\n _: 2 /* DYNAMIC */,\n __: [11]\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"onClick\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"success\",\n size: \"small\",\n onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => $options.editMarkdownTrigger(scope.row), [\"stop\"])\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[12] || (_cache[12] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"MD\")])),\n _: 2 /* DYNAMIC */,\n __: [12]\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"onClick\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"danger\",\n size: \"small\",\n onClick: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withModifiers)($event => $options.removeAntiqueInServer(scope.row), [\"stop\"])\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[13] || (_cache[13] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"删除\")])),\n _: 2 /* DYNAMIC */,\n __: [13]\n }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"onClick\"])]))]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"data\", \"height\", \"onCurrentChange\"])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_detail_editor, {\n visible: $data.dialogVisible,\n initData: $data.form,\n mesumSelectedId: $data.mesumSelectedId,\n photo_prefix: $data.mesumSelected.photo_prefix,\n \"onUpdate:close\": _cache[4] || (_cache[4] = $event => $data.dialogVisible = false),\n \"onUpdate:refresh\": $options.handleRefreshAntique\n }, null, 8 /* PROPS */, [\"visible\", \"initData\", \"mesumSelectedId\", \"photo_prefix\", \"onUpdate:refresh\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_ai_text_editor, {\n visible: $data.AiRefineDialogVisible,\n initData: $data.aiRefineForm,\n mesumSelectedId: $data.mesumSelectedId,\n photo_prefix: $data.mesumSelected.photo_prefix,\n \"onUpdate:close\": _cache[5] || (_cache[5] = $event => $data.AiRefineDialogVisible = false),\n \"onUpdate:refresh\": $options.handleRefreshAntique\n }, null, 8 /* PROPS */, [\"visible\", \"initData\", \"mesumSelectedId\", \"photo_prefix\", \"onUpdate:refresh\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_markdown_editor, {\n visible: $data.markdownDialogVisible,\n initData: $data.markdownForm,\n mesumSelectedId: $data.mesumSelectedId,\n photo_prefix: $data.mesumSelected.photo_prefix,\n \"onUpdate:close\": _cache[6] || (_cache[6] = $event => $data.markdownDialogVisible = false),\n \"onUpdate:refresh\": $options.handleRefreshAntique\n }, null, 8 /* PROPS */, [\"visible\", \"initData\", \"mesumSelectedId\", \"photo_prefix\", \"onUpdate:refresh\"])]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/components/ExhibitDetail.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/LocationManager.vue?vue&type=template&id=1a1d5038&scoped=true": /*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/LocationManager.vue?vue&type=template&id=1a1d5038&scoped=true ***! \*****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"content-container\"\n};\nconst _hoisted_2 = {\n class: \"title\",\n ref: \"refTitle\"\n};\nconst _hoisted_3 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\"\n }\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_table_column = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-table-column\");\n const _component_el_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-button\");\n const _component_el_table = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-table\");\n const _component_el_col = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-col\");\n const _component_el_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-row\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, null, 512 /* NEED_PATCH */), false ? (0) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/components/LocationManager.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MarkdownEditor.vue?vue&type=template&id=070a2928&scoped=true": /*!****************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MarkdownEditor.vue?vue&type=template&id=070a2928&scoped=true ***! \****************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"input-section\"\n};\nconst _hoisted_2 = {\n class: \"form-group\"\n};\nconst _hoisted_3 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\",\n \"margin-bottom\": \"10px\"\n }\n};\nconst _hoisted_4 = {\n style: {\n \"font-weight\": \"bold\"\n }\n};\nconst _hoisted_5 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"10px\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_6 = [\"href\"];\nconst _hoisted_7 = {\n key: 1,\n style: {\n \"color\": \"#999\"\n }\n};\nconst _hoisted_8 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"gap\": \"10px\",\n \"margin-bottom\": \"20px\",\n \"padding\": \"10px\",\n \"background\": \"#f5f7fa\",\n \"border-radius\": \"4px\"\n }\n};\nconst _hoisted_9 = {\n key: 0,\n style: {\n \"color\": \"#67C23A\"\n }\n};\nconst _hoisted_10 = {\n style: {\n \"margin-bottom\": \"20px\"\n }\n};\nconst _hoisted_11 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\",\n \"margin-bottom\": \"10px\"\n }\n};\nconst _hoisted_12 = {\n style: {\n \"color\": \"#909399\",\n \"font-size\": \"12px\"\n }\n};\nconst _hoisted_13 = {\n style: {\n \"display\": \"flex\",\n \"flex-direction\": \"row\",\n \"align-items\": \"center\",\n \"justify-content\": \"flex-start\",\n \"margin-bottom\": \"15px\"\n }\n};\nconst _hoisted_14 = {\n style: {\n \"display\": \"inline-block\",\n \"flex\": \"1\"\n }\n};\nconst _hoisted_15 = [\"href\"];\nconst _hoisted_16 = {\n key: 1,\n style: {\n \"color\": \"#999\"\n }\n};\nconst _hoisted_17 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\",\n \"margin-bottom\": \"15px\"\n }\n};\nconst _hoisted_18 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_19 = [\"src\"];\nconst _hoisted_20 = {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\",\n \"margin-bottom\": \"15px\"\n }\n};\nconst _hoisted_21 = {\n style: {\n \"width\": \"90%\",\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_22 = {\n style: {\n \"display\": \"flex\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_23 = {\n style: {\n \"display\": \"inline-block\",\n \"width\": \"100px\"\n }\n};\nconst _hoisted_24 = {\n class: \"upload-section\"\n};\nconst _hoisted_25 = {\n style: {\n \"margin-left\": \"10px\",\n \"width\": \"100%\",\n \"height\": \"5vh\",\n \"display\": \"flex\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_26 = {\n style: {\n \"display\": \"inline-block\",\n \"width\": \"200px\"\n }\n};\nconst _hoisted_27 = {\n class: \"result-section\"\n};\nconst _hoisted_28 = {\n key: 0,\n class: \"error-message\"\n};\nconst _hoisted_29 = {\n key: 1,\n class: \"success-message\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-button\");\n const _component_el_upload = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-upload\");\n const _component_el_col = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-col\");\n const _component_el_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-row\");\n const _component_el_option = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-option\");\n const _component_el_select = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-select\");\n const _component_el_input = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-input\");\n const _component_el_dialog = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-dialog\");\n const _directive_loading = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDirective)(\"loading\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_dialog, {\n title: \"Markdown 文件与TTS编辑\",\n modelValue: $data.dialogVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.dialogVisible = $event),\n width: \"85%\",\n \"align-center\": \"\",\n \"before-close\": $options.handleDialogClose\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_row, null, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 24,\n style: {\n \"border\": \"1px solid lightgray\",\n \"padding\": \"10px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_4, \"展品ID: \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.id) + \" - \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.label), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_5, [_cache[4] || (_cache[4] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"Markdown文件地址:\", -1 /* HOISTED */)), $data.formData.md_file_url ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"a\", {\n key: 0,\n href: $data.formData.md_file_url,\n target: \"_blank\",\n style: {\n \"max-width\": \"300px\",\n \"overflow\": \"hidden\",\n \"text-overflow\": \"ellipsis\"\n }\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.md_file_url), 9 /* TEXT, PROPS */, _hoisted_6)) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_7, \"未上传\"))])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" Markdown 文件上传区域 \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_8, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_upload, {\n ref: \"uploadMdRef\",\n action: \"\",\n \"auto-upload\": false,\n limit: 1,\n \"on-change\": $options.handleMdFileChange,\n \"on-exceed\": $options.handleMdFileExceed,\n \"show-file-list\": false,\n accept: \".md,.markdown,.txt\"\n }, {\n trigger: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n size: \"small\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[5] || (_cache[5] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"选择Markdown文件\")])),\n _: 1 /* STABLE */,\n __: [5]\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"on-change\", \"on-exceed\"]), $data.mdFile ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_9, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.mdFile.name), 1 /* TEXT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n size: \"small\",\n type: \"success\",\n disabled: !$data.mdFile,\n onClick: $options.submitMdFileUpload\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[6] || (_cache[6] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 上传并更新 \")])),\n _: 1 /* STABLE */,\n __: [6]\n }, 8 /* PROPS */, [\"disabled\", \"onClick\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n size: \"small\",\n type: \"danger\",\n disabled: !$data.formData.md_file_url,\n onClick: $options.removeMdFileUrl\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[7] || (_cache[7] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 删除Markdown地址 \")])),\n _: 1 /* STABLE */,\n __: [7]\n }, 8 /* PROPS */, [\"disabled\", \"onClick\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n size: \"small\",\n type: \"info\",\n disabled: !$data.formData.md_file_url,\n onClick: $options.loadMdContent\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[8] || (_cache[8] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 读取Markdown内容 \")])),\n _: 1 /* STABLE */,\n __: [8]\n }, 8 /* PROPS */, [\"disabled\", \"onClick\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" Markdown 内容编辑区域 \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_11, [_cache[9] || (_cache[9] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"font-weight\": \"bold\"\n }\n }, \"Markdown 内容编辑:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_12, \"字符数: \" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.mdContent.length), 1 /* TEXT */)]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"textarea\", {\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.mdContent = $event),\n rows: \"15\",\n placeholder: \"请先上传Markdown文件或读取现有内容...\",\n style: {\n \"width\": \"100%\",\n \"font-family\": \"monospace\",\n \"padding\": \"10px\",\n \"border\": \"1px solid #dcdfe6\",\n \"border-radius\": \"4px\"\n }\n }, \" \", 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $data.mdContent]])])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n })]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" TTS 音频生成与上传区域 \"), _cache[18] || (_cache[18] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"space-between\",\n \"color\": \"blue\",\n \"margin\": \"10px 0\"\n }\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", null, \"Markdown TTS 音频\")], -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)(((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_row, {\n \"element-loading-text\": \"音频生成中...\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 24,\n style: {\n \"border\": \"1px solid gray\",\n \"padding\": \"15px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_13, [_cache[11] || (_cache[11] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"margin-right\": \"20px\",\n \"display\": \"inline-block\",\n \"width\": \"200px\"\n }\n }, \"TTS音频地址:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_14, [$data.formData.md_tts_url ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"a\", {\n key: 0,\n href: $data.formData.md_tts_url,\n target: \"_blank\"\n }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.formData.md_tts_url), 9 /* TEXT, PROPS */, _hoisted_15)) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"span\", _hoisted_16, \"未生成\"))]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"danger\",\n size: \"default\",\n disabled: !$data.formData.md_tts_url,\n onClick: $options.removeMdTtsUrl\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[10] || (_cache[10] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 删除音频地址 \")])),\n _: 1 /* STABLE */,\n __: [10]\n }, 8 /* PROPS */, [\"disabled\", \"onClick\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_17, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_18, [_cache[12] || (_cache[12] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", null, \"音色选择:\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.voiceSelected_md,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.voiceSelected_md = $event),\n clearable: \"\",\n placeholder: \"请选择音色\",\n onChange: $options.voiceSelectedChangeMd,\n \"allow-create\": \"\",\n \"default-first-option\": \"\",\n style: {\n \"width\": \"140px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.voiceOptions, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.value,\n label: item.label,\n value: item.value\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\", \"onChange\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n disabled: !$data.mdContent || $data.mdContent.length === 0,\n onClick: $options.generateMdTTS\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[13] || (_cache[13] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 生成语音 \")])),\n _: 1 /* STABLE */,\n __: [13]\n }, 8 /* PROPS */, [\"disabled\", \"onClick\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"audio\", {\n class: \"audio-player\",\n ref: \"audioPlayerMd\",\n src: $data.preview.audioSrc_md,\n controls: \"\"\n }, null, 8 /* PROPS */, _hoisted_19), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n disabled: !$data.preview.downReady_md,\n onClick: $options.downloadMdTTS\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[14] || (_cache[14] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 下载语音 \")])),\n _: 1 /* STABLE */,\n __: [14]\n }, 8 /* PROPS */, [\"disabled\", \"onClick\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_20, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_21, [_cache[15] || (_cache[15] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"下载文件名\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n modelValue: $data.downloadFilename_md,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.downloadFilename_md = $event)\n }, null, 8 /* PROPS */, [\"modelValue\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_22, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", _hoisted_23, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.downloadPromptMd), 1 /* TEXT */)])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" 上传区域 \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_24, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_row, {\n align: \"middle\",\n style: {\n \"height\": \"5vh\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 14\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_25, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_upload, {\n action: \"\",\n \"auto-upload\": false,\n \"on-change\": $options.handleUploadChangeMd,\n \"show-file-list\": false,\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\"\n }\n }, {\n trigger: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[16] || (_cache[16] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"选取文件\")])),\n _: 1 /* STABLE */,\n __: [16]\n })]),\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_26, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.uploadFileName_md), 1 /* TEXT */)]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"on-change\"])])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 8\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n disabled: !$data.uploadFile_md,\n style: {\n \"width\": \"90%\"\n },\n size: \"default\",\n type: \"success\",\n onClick: $options.submitMdTTSUpload\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[17] || (_cache[17] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\" 上传并修改音频地址 \")])),\n _: 1 /* STABLE */,\n __: [17]\n }, 8 /* PROPS */, [\"disabled\", \"onClick\"])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 512 /* NEED_PATCH */), [[vue__WEBPACK_IMPORTED_MODULE_0__.vShow, $data.preview.visible_md]])])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n })), [[_directive_loading, $data.isTTSGenerating]])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\" 结果展示 \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_27, [$data.result.error ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_28, \" 错误:\" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($data.result.error), 1 /* TEXT */)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $data.result.success ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_29, _cache[19] || (_cache[19] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"p\", null, \"操作成功!\", -1 /* HOISTED */)]))) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)])]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\", \"before-close\"]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/components/MarkdownEditor.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MuseumSubscriptions.vue?vue&type=template&id=08905204&scoped=true": /*!*********************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MuseumSubscriptions.vue?vue&type=template&id=08905204&scoped=true ***! \*********************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"content-container\"\n};\nconst _hoisted_2 = {\n class: \"title\",\n ref: \"refTitle\"\n};\nconst _hoisted_3 = {\n class: \"flex-row\"\n};\nconst _hoisted_4 = {\n class: \"flex-row\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_option = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-option\");\n const _component_el_select = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-select\");\n const _component_el_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-button\");\n const _component_el_input = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-input\");\n const _component_el_table_column = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-table-column\");\n const _component_el_table = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-table\");\n const _component_el_col = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-col\");\n const _component_el_row = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-row\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.museumCategorySelectedId,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.museumCategorySelectedId = $event),\n clearable: \"\",\n placeholder: \"请选择目录\",\n onChange: $options.mesumCategorySelectedChange,\n style: {\n \"width\": \"140px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.mesumCategoryOptions, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.id,\n label: item.label,\n value: item.id\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\", \"onChange\"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n placeholder: \"请输入标题搜索\",\n modelValue: $data.labelFilter,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.labelFilter = $event),\n clearable: \"\",\n style: {\n \"width\": \"200px\"\n }\n }, {\n append: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n icon: \"el-icon-search\",\n onClick: $options.filterByLabel\n }, null, 8 /* PROPS */, [\"onClick\"])]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"]), _cache[3] || (_cache[3] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"h3\", null, \"用户订阅管理\", -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"总金额:\" + (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($options.totalAmount), 1 /* TEXT */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.mesumSelectedId,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.mesumSelectedId = $event),\n clearable: \"\",\n placeholder: \"请选择博物馆\",\n onChange: $options.museumSelectedChange,\n \"default-first-option\": \"\",\n style: {\n \"width\": \"140px\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.mesumOptions, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.id,\n label: item.name,\n value: item.id\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\", \"onChange\"])])], 512 /* NEED_PATCH */), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_row, null, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_col, {\n span: 24\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table, {\n data: $options.subscriptionsFiltered,\n border: \"\",\n height: $data.tableHeight,\n \"highlight-current-row\": \"\",\n style: {\n \"width\": \"100%\"\n },\n onCurrentChange: $options.handleCurrentChange\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"id\",\n label: \"编号\",\n width: \"60\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"openid\",\n label: \"openid\",\n width: \"280\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"phone\",\n label: \"phone\",\n width: \"150\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"template_name\",\n label: \"订阅项目\",\n width: \"150\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"price\",\n label: \"金额\",\n width: \"100\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"template_validity_type\",\n label: \"类型\",\n width: \"100\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"museum_name\",\n label: \"场地(所)名称\",\n width: \"150\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"start_date\",\n label: \"开始时间\",\n width: \"200\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"end_date\",\n label: \"失效时间\",\n width: \"200\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n prop: \"template_description\",\n label: \"说明\",\n width: \"300\"\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_table_column, {\n fixed: \"right\",\n label: \"操作\",\n width: \"100\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"\\r\\n \\r\\n \")]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"data\", \"height\", \"onCurrentChange\"])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n })]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/components/MuseumSubscriptions.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/NaviMenu.vue?vue&type=template&id=2a9647d5&scoped=true": /*!**********************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/NaviMenu.vue?vue&type=template&id=2a9647d5&scoped=true ***! \**********************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n class: \"navi-menu\"\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_menu_item = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-menu-item\");\n const _component_el_menu = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-menu\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [_cache[8] || (_cache[8] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n style: {\n \"width\": \"93%\",\n \"height\": \"5vh\",\n \"position\": \"absolute\",\n \"top\": \"0\",\n \"border-bottom\": \"1px solid lightgray\"\n }\n }, null, -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_menu, {\n \"default-active\": $data.defaultActive,\n onOpen: $options.handleMenuOpen,\n onSelect: $options.handleMenuSelect,\n \"background-color\": \"#545c64\",\n \"text-color\": \"#fff\",\n \"active-text-color\": \"#ffd04b\",\n mode: \"vertical\",\n style: {\n \"top\": \"7vh\",\n \"width\": \"9vw\",\n \"position\": \"absolute\",\n \"border-right\": \"none\"\n }\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [$options.hasDataAdminMenu ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_menu_item, {\n key: 0,\n index: \"1\"\n }, {\n title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[0] || (_cache[0] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"讲解词管理\", -1 /* HOISTED */)])),\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [_cache[1] || (_cache[1] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"margin-right\": \"16px\"\n }\n }, \"📖\", -1 /* HOISTED */))]),\n _: 1 /* STABLE */,\n __: [1]\n })) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $options.hasDeviceMenu ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_menu_item, {\n key: 1,\n index: \"2\"\n }, {\n title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[2] || (_cache[2] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"设备在线\", -1 /* HOISTED */)])),\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [_cache[3] || (_cache[3] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"margin-right\": \"20px\"\n }\n }, \"📱\", -1 /* HOISTED */))]),\n _: 1 /* STABLE */,\n __: [3]\n })) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $options.hasLocationMenu ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_menu_item, {\n key: 2,\n index: \"3\"\n }, {\n title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[4] || (_cache[4] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"场所管理\", -1 /* HOISTED */)])),\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [_cache[5] || (_cache[5] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"margin-right\": \"20px\"\n }\n }, \"🏛\", -1 /* HOISTED */))]),\n _: 1 /* STABLE */,\n __: [5]\n })) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true), $options.hasSubscriptionsMenu ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_menu_item, {\n key: 3,\n index: \"4\"\n }, {\n title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[6] || (_cache[6] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", null, \"订阅管理\", -1 /* HOISTED */)])),\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [_cache[7] || (_cache[7] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n style: {\n \"margin-right\": \"20px\"\n }\n }, \"🏛\", -1 /* HOISTED */))]),\n _: 1 /* STABLE */,\n __: [7]\n })) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"v-if\", true)]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"default-active\", \"onOpen\", \"onSelect\"]), _cache[9] || (_cache[9] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n style: {\n \"width\": \"93%\",\n \"height\": \"5vh\",\n \"position\": \"absolute\",\n \"bottom\": \"0\",\n \"border-top\": \"1px solid lightgray\"\n }\n }, null, -1 /* HOISTED */))]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/components/NaviMenu.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/UserLogin.vue?vue&type=template&id=3a5d5944": /*!***********************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/UserLogin.vue?vue&type=template&id=3a5d5944 ***! \***********************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = {\n style: {\n \"width\": \"100%\",\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"align-content\": \"center\",\n \"justify-content\": \"center\"\n }\n};\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_option = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-option\");\n const _component_el_select = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-select\");\n const _component_el_form_item = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-form-item\");\n const _component_el_input = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-input\");\n const _component_el_button = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-button\");\n const _component_el_form = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-form\");\n const _component_el_dialog = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"el-dialog\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", null, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_dialog, {\n modelValue: $data.dialogVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.dialogVisible = $event),\n width: \"20%\",\n center: \"\",\n \"custom-class\": \"loginDialog\",\n \"show-close\": false\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [_cache[6] || (_cache[6] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", {\n style: {\n \"text-align\": \"center\",\n \"width\": \"100%\"\n }\n }, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"h3\", null, \"华小博智能导览管理系统\")], -1 /* HOISTED */)), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_form, {\n model: $data.form,\n ref: \"loginForm\",\n autocomplete: \"off\",\n \"label-width\": \"80px\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_form_item, {\n label: \"用户名\",\n prop: \"username\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)(\"\\r\\n \\r\\n \"), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_select, {\n modelValue: $data.form.username,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.form.username = $event),\n filterable: \"\",\n \"allow-create\": \"\",\n \"default-first-option\": \"\",\n placeholder: \"请输入用户名\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($data.availableUser, item => {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_el_option, {\n key: item.value,\n label: item.name,\n value: item.value\n }, null, 8 /* PROPS */, [\"label\", \"value\"]);\n }), 128 /* KEYED_FRAGMENT */))]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_form_item, {\n label: \"密码\",\n prop: \"password\"\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_input, {\n modelValue: $data.form.password,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.form.password = $event),\n type: \"text\",\n class: \"pwd\"\n }, {\n suffix: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"i\", {\n class: \"el-icon-view\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.hiddenPwd && $options.hiddenPwd(...args))\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"modelValue\"])]),\n _: 1 /* STABLE */\n }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_form_item, null, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n type: \"primary\",\n onClick: $options.handleLogin\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[4] || (_cache[4] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"登录\")])),\n _: 1 /* STABLE */,\n __: [4]\n }, 8 /* PROPS */, [\"onClick\"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_el_button, {\n onClick: $options.cancelLogin\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => _cache[5] || (_cache[5] = [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(\"取消\")])),\n _: 1 /* STABLE */,\n __: [5]\n }, 8 /* PROPS */, [\"onClick\"])])]),\n _: 1 /* STABLE */\n })]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"model\"])]),\n _: 1 /* STABLE */,\n __: [6]\n }, 8 /* PROPS */, [\"modelValue\"])]);\n}\n\n//# sourceURL=webpack://museum-admin/./src/components/UserLogin.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css": /*!****************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css ***! \****************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n#app {\\n font-family: Avenir, Helvetica, Arial, sans-serif;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n text-align: center;\\n color: #2c3e50;\\n margin:0;\\n padding: 0;\\n overflow: hidden;\\n}\\n.container {\\n width: 98vw;height: 97vh; margin: 0px auto; padding: 0px;\\n display: flex;\\n flex-direction: row;\\n overflow-x: hidden;\\n overflow-y: hidden;\\n box-sizing: border-box;\\n}\\n\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/App.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AiTextEditor.vue?vue&type=style&index=0&id=0e5ef672&scoped=true&lang=css": /*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/AiTextEditor.vue?vue&type=style&index=0&id=0e5ef672&scoped=true&lang=css ***! \************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.dialog-footer[data-v-0e5ef672] {\\r\\n display: flex;\\r\\n justify-content: flex-end;\\n}\\n.el_dialog--header[data-v-0e5ef672]{\\r\\n height:30px;\\r\\n padding: 0px;\\n}\\n.el-dialog__header[data-v-0e5ef672] {\\r\\n background: #f0f9eb !important;\\r\\n padding: 2px 2px !important;\\r\\n border-bottom: 1px solid #ebeef5;\\n}\\n.el-dialog__title[data-v-0e5ef672] {\\r\\n margin: 0;\\r\\n padding: 0;\\r\\n color: #67C23A !important;\\r\\n font-size: 16px !important;\\n}\\n.el-dialog__headerbtn[data-v-0e5ef672] {\\r\\n margin-top: 3px !important;\\r\\n top: 2px !important; /* 根据需求调整数值 */\\n}\\n.form-group[data-v-0e5ef672] { padding: 10px; margin-bottom: 5px;border-bottom: 2px solid #eee;\\n}\\nlabel[data-v-0e5ef672] { display: block; margin-bottom: 5px;\\n}\\ninput[data-v-0e5ef672], select[data-v-0e5ef672], textarea[data-v-0e5ef672] { width: 100%; padding: 8px;\\n}\\nbutton[data-v-0e5ef672] { padding: 10px 20px; margin:5px; cursor: pointer;\\n}\\n.audio-player[data-v-0e5ef672] { margin: 20px 0; height:40px}\\n.flex-row[data-v-0e5ef672] { display: flex; gap: 15px; align-items: center;\\n}\\n.error-message[data-v-0e5ef672] { color: red; margin-top: 10px;\\n}\\n.success-message[data-v-0e5ef672] { color: green; margin-top: 10px;\\n}\\n.upload-section[data-v-0e5ef672] { margin-top: 20px; border-top: 2px solid #eee; padding-top: 20px;height: 10vh\\n}\\r\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/components/AiTextEditor.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DetailEditor.vue?vue&type=style&index=0&id=9a748b64&scoped=true&lang=css": /*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DetailEditor.vue?vue&type=style&index=0&id=9a748b64&scoped=true&lang=css ***! \************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.dialog-footer[data-v-9a748b64] {\\r\\n display: flex;\\r\\n justify-content: flex-end;\\n}\\n.el_dialog--header[data-v-9a748b64]{\\r\\n height:30px;\\r\\n padding: 0px;\\n}\\n.el-dialog__header[data-v-9a748b64] {\\r\\n background: #f0f9eb !important;\\r\\n padding: 2px 2px !important;\\r\\n border-bottom: 1px solid #ebeef5;\\n}\\n.el-dialog__title[data-v-9a748b64] {\\r\\n margin: 0;\\r\\n padding: 0;\\r\\n color: #67C23A !important;\\r\\n font-size: 16px !important;\\n}\\n.el-dialog__headerbtn[data-v-9a748b64] {\\r\\n margin-top: 3px !important;\\r\\n top: 2px !important; /* 根据需求调整数值 */\\n}\\n.form-group[data-v-9a748b64] { padding: 5px; margin-bottom: 5px;border-bottom: 2px solid #eee;\\n}\\nlabel[data-v-9a748b64] { display: block; margin-bottom: 5px;\\n}\\ninput[data-v-9a748b64], select[data-v-9a748b64], textarea[data-v-9a748b64] { width: 100%; padding: 8px;\\n}\\nbutton[data-v-9a748b64] { padding: 10px 20px; margin:5px; cursor: pointer;\\n}\\n.audio-player[data-v-9a748b64] { margin: 20px 0; height:40px}\\n.flex-row[data-v-9a748b64] { display: flex; gap: 15px; align-items: center;\\n}\\n.error-message[data-v-9a748b64] { color: red; margin-top: 10px;\\n}\\n.success-message[data-v-9a748b64] { color: green; margin-top: 10px;\\n}\\n.upload-section[data-v-9a748b64] { margin-top: 20px; border-top: 2px solid #eee; padding-top: 20px;height: 10vh\\n}\\r\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/components/DetailEditor.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DeviceMonitor.vue?vue&type=style&index=0&id=379ddc24&scoped=true&lang=css": /*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/DeviceMonitor.vue?vue&type=style&index=0&id=379ddc24&scoped=true&lang=css ***! \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.content-container[data-v-379ddc24]{\\r\\n width: 88vw;\\r\\n height: 97vh;\\r\\n box-sizing: border-box;\\r\\n overflow-y: hidden;\\n}\\n.device-log-container[data-v-379ddc24]{\\r\\n width: 85vw;\\r\\n height: 86vh;\\n}\\n.device-list-container[data-v-379ddc24]{\\r\\n height: 86vh;\\r\\n width: 96%;\\r\\n border-right: 1px solid lightgray;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n justify-content: flex-start;\\r\\n align-items: flex-start;\\n}\\n.device-list-device[data-v-379ddc24]{\\r\\n overflow-y: auto;\\r\\n width: 94%;\\r\\n border: 1px solid lightblue;\\r\\n height:81vh;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n align-items: center;\\r\\n justify-content: flex-start;\\n}\\n.device-item[data-v-379ddc24]{\\r\\n border: 1px solid lightcoral;\\r\\n border-radius: 5px;\\r\\n margin-top: 5px;\\r\\n height:3vh;\\r\\n width: 90%;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n cursor: pointer;\\n}\\n.device-item-selected[data-v-379ddc24]{\\r\\n background: lightcyan;\\n}\\n.device-log-list[data-v-379ddc24]{\\r\\n overflow-y: auto;\\r\\n width: 94%;\\r\\n border: 1px solid lightblue;\\r\\n height:81vh;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n align-items: center;\\r\\n justify-content: flex-start;\\n}\\n.log-file-item[data-v-379ddc24]{\\r\\n height: 10vh;\\r\\n width: 80%;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n align-items: center;\\r\\n justify-content: space-between;\\r\\n border-radius: 6px;\\r\\n border: 1px solid lightgray;\\r\\n margin-top: 10px;\\n}\\r\\n\\r\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/components/DeviceMonitor.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ExhibitDetail.vue?vue&type=style&index=0&id=7b7d2c4a&scoped=true&lang=css": /*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ExhibitDetail.vue?vue&type=style&index=0&id=7b7d2c4a&scoped=true&lang=css ***! \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.content-container[data-v-7b7d2c4a]{\\r\\n width: 88vw;\\r\\n height: 97vh;\\r\\n box-sizing: border-box;\\r\\n overflow-y: hidden;\\n}\\n.title[data-v-7b7d2c4a]{width:100%;display: flex;align-items: center;justify-content: space-between;}\\n.flex-row[data-v-7b7d2c4a] { display: flex; gap: 15px; align-items: center;\\n}\\n.form-group[data-v-7b7d2c4a] { padding: 10px; margin-bottom: 5px;border-bottom: 2px solid #eee;\\n}\\nlabel[data-v-7b7d2c4a] { display: block; margin-bottom: 5px;\\n}\\ninput[data-v-7b7d2c4a], select[data-v-7b7d2c4a], textarea[data-v-7b7d2c4a] { width: 100%; padding: 8px;\\n}\\nbutton[data-v-7b7d2c4a] { padding: 10px 20px; margin:5px; cursor: pointer;\\n}\\n.audio-player[data-v-7b7d2c4a] { margin: 20px 0; height:40px}\\n.editable-cell[data-v-7b7d2c4a] {\\r\\n min-height: 32px;\\r\\n display: flex;\\r\\n align-items: center;\\n}\\n.display-value[data-v-7b7d2c4a] {\\r\\n width: 100%;\\r\\n padding: 8px;\\r\\n cursor: pointer;\\r\\n border-radius: 4px;\\r\\n transition: background-color 0.2s;\\n}\\n.display-value[data-v-7b7d2c4a]:hover {\\r\\n background-color: #f5f7fa;\\n}\\n.edit-input[data-v-7b7d2c4a] {\\r\\n width: 100%;\\n}\\r\\n\\r\\n\\r\\n\\r\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/components/ExhibitDetail.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/LocationManager.vue?vue&type=style&index=0&id=1a1d5038&scoped=true&lang=css": /*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/LocationManager.vue?vue&type=style&index=0&id=1a1d5038&scoped=true&lang=css ***! \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.content-container[data-v-1a1d5038]{\\r\\n width: 88vw;\\r\\n height: 97vh;\\r\\n box-sizing: border-box;\\r\\n overflow-y: hidden;\\n}\\n.title[data-v-1a1d5038]{\\r\\n width:100%;\\r\\n height: 5vh;\\r\\n display: flex;align-items: center;justify-content: space-between;\\n}\\n.flex-row[data-v-1a1d5038] { display: flex; gap: 15px; align-items: center;\\n}\\n.wave-bars[data-v-1a1d5038] {\\r\\n display: flex;\\r\\n align-items: flex-end;\\r\\n margin-bottom: 20px;\\n}\\n.audio-wave[data-v-1a1d5038] {\\r\\n width: 100%;\\r\\n height: 40px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n gap: 3px;\\n}\\n.wave-bar[data-v-1a1d5038] {\\r\\n width: 3px;\\r\\n margin: 0 2px;\\r\\n background-color: lightblue;\\r\\n transition: height 0.1s ease-in-out;\\r\\n animation: waveAnimation-1a1d5038 1s ease-in-out infinite;\\r\\n opacity: 0.8;\\r\\n /* 设置初始高度,避免抖动 */\\r\\n height: 20px;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(1) {\\r\\n animation-delay: 0s;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(2) {\\r\\n animation-delay: 0.1s;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(3) {\\r\\n animation-delay: 0.2s;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(4) {\\r\\n animation-delay: 0.3s;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(5) {\\r\\n animation-delay: 0.4s;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(6) {\\r\\n animation-delay: 0.5s;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(7) {\\r\\n animation-delay: 0.6s;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(8) {\\r\\n animation-delay: 0.7s;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(9) {\\r\\n animation-delay: 0.8s;\\n}\\n.wave-bar[data-v-1a1d5038]:nth-child(10) {\\r\\n animation-delay: 0.9s;\\n}\\n@keyframes waveAnimation-1a1d5038 {\\n0%, 100% {\\r\\n height: 20px;\\n}\\n25%,75% {\\r\\n height: 30px;\\n}\\n50% {\\r\\n height: 40px;\\n}\\n}\\r\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/components/LocationManager.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MarkdownEditor.vue?vue&type=style&index=0&id=070a2928&scoped=true&lang=css": /*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MarkdownEditor.vue?vue&type=style&index=0&id=070a2928&scoped=true&lang=css ***! \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.dialog-footer[data-v-070a2928] {\\r\\n display: flex;\\r\\n justify-content: flex-end;\\n}\\n.el-dialog__header[data-v-070a2928] {\\r\\n background: #f0f9eb !important;\\r\\n padding: 2px 2px !important;\\r\\n border-bottom: 1px solid #ebeef5;\\n}\\n.el-dialog__title[data-v-070a2928] {\\r\\n margin: 0;\\r\\n padding: 0;\\r\\n color: #67C23A !important;\\r\\n font-size: 16px !important;\\n}\\n.el-dialog__headerbtn[data-v-070a2928] {\\r\\n margin-top: 3px !important;\\r\\n top: 2px !important;\\n}\\n.form-group[data-v-070a2928] {\\r\\n padding: 5px;\\r\\n margin-bottom: 5px;\\r\\n border-bottom: 2px solid #eee;\\n}\\nlabel[data-v-070a2928] {\\r\\n display: block;\\r\\n margin-bottom: 5px;\\n}\\ninput[data-v-070a2928], select[data-v-070a2928], textarea[data-v-070a2928] {\\r\\n width: 100%;\\r\\n padding: 8px;\\n}\\nbutton[data-v-070a2928] {\\r\\n padding: 10px 20px;\\r\\n margin: 5px;\\r\\n cursor: pointer;\\n}\\n.audio-player[data-v-070a2928] {\\r\\n margin: 20px 0;\\r\\n height: 40px\\n}\\n.error-message[data-v-070a2928] {\\r\\n color: red;\\r\\n margin-top: 10px;\\n}\\n.success-message[data-v-070a2928] {\\r\\n color: green;\\r\\n margin-top: 10px;\\n}\\n.upload-section[data-v-070a2928] {\\r\\n margin-top: 20px;\\r\\n border-top: 2px solid #eee;\\r\\n padding-top: 20px;\\r\\n height: 10vh\\n}\\r\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/components/MarkdownEditor.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MuseumSubscriptions.vue?vue&type=style&index=0&id=08905204&scoped=true&lang=css": /*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/MuseumSubscriptions.vue?vue&type=style&index=0&id=08905204&scoped=true&lang=css ***! \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.content-container[data-v-08905204]{\\r\\n width: 88vw;\\r\\n height: 97vh;\\r\\n box-sizing: border-box;\\r\\n overflow-y: hidden;\\n}\\n.title[data-v-08905204]{width:100%;display: flex;align-items: center;justify-content: space-between;}\\n.flex-row[data-v-08905204] { display: flex; gap: 15px; align-items: center;\\n}\\n.form-group[data-v-08905204] { padding: 10px; margin-bottom: 5px;border-bottom: 2px solid #eee;\\n}\\nlabel[data-v-08905204] { display: block; margin-bottom: 5px;\\n}\\ninput[data-v-08905204], select[data-v-08905204], textarea[data-v-08905204] { width: 100%; padding: 8px;\\n}\\nbutton[data-v-08905204] { padding: 10px 20px; margin:5px; cursor: pointer;\\n}\\n.audio-player[data-v-08905204] { margin: 20px 0; height:40px}\\r\\n\\r\\n\\r\\n\\r\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/components/MuseumSubscriptions.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/NaviMenu.vue?vue&type=style&index=0&id=2a9647d5&scoped=true&lang=css": /*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/NaviMenu.vue?vue&type=style&index=0&id=2a9647d5&scoped=true&lang=css ***! \********************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.navi-menu[data-v-2a9647d5]{\\r\\n flex-shrink: unset;\\r\\n width: 10vw;\\r\\n height: 97vh;\\r\\n margin: 0;\\r\\n padding: 0;\\r\\n box-sizing: border-box;\\r\\n position: relative;\\r\\n border-right: 1px solid lightgray;\\r\\n background: #545C64;\\n}\\r\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/components/NaviMenu.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/UserLogin.vue?vue&type=style&index=0&id=3a5d5944&lang=css": /*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/UserLogin.vue?vue&type=style&index=0&id=3a5d5944&lang=css ***! \*********************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* 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__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* 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__);\n// Imports\n\n\nvar ___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()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.loginDialog .el-dialog__body {\\r\\n padding: 2px 2px 2px 2px;\\n}\\n.pwd {\\r\\n -webkit-text-security: disc;\\n}\\n/deep/.el-input__suffix {\\r\\n -webkit-text-security: none;\\n}\\r\\n\\r\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://museum-admin/./src/components/UserLogin.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D"); /***/ }), /***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css": /*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css ***! \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval("// style-loader: Adds some css to the DOM by adding a