Files
education/frontend/node_modules/.cache/vue-loader/558f2902f319b5f8cd1f7e853213292c.json
T

1 line
22 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachBusiness\\venue\\index.vue?vue&type=style&index=0&id=7a9854ce&scoped=true&lang=scss","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachBusiness\\venue\\index.vue","mtime":1787652512656},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\css-loader\\dist\\cjs.js","mtime":1787309792478},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\loaders\\stylePostLoader.js","mtime":1787309794547},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\postcss-loader\\src\\index.js","mtime":1787309793084},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\sass-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js","mtime":1787309793790}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoNCi5hcHAtY29udGFpbmVyIHsNCiAgcGFkZGluZzogMjBweDsNCn0NCg0KLnZlbnVlLXBhZ2Ugew0KICAuc2VhcmNoLWNhcmQgew0KICAgIG1hcmdpbi1ib3R0b206IDE2cHg7DQoNCiAgICAuc2VhcmNoLWZvcm0gew0KICAgICAgLnctZnVsbCB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgfQ0KDQogICAgICAuc2VhcmNoLWFjdGlvbnMgew0KICAgICAgICBwYWRkaW5nLXRvcDogNHB4Ow0KICAgICAgfQ0KICAgIH0NCiAgfQ0KDQogIC50YWJsZS1jYXJkIHsNCiAgICAubGlzdC1oZWFkZXIgew0KICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4Ow0KDQogICAgICAubGlzdC10aXRsZSB7DQogICAgICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgY29sb3I6ICMzMDMxMzM7DQogICAgICB9DQogICAgfQ0KDQogICAgLnBhZ2luYXRpb24gew0KICAgICAgbWFyZ2luLXRvcDogMTZweDsNCiAgICAgIHRleHQtYWxpZ246IHJpZ2h0Ow0KICAgIH0NCiAgfQ0KfQ0KDQoubnVtYmVyLXVuaXQtZmllbGQgew0KICBkaXNwbGF5OiBmbGV4Ow0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBnYXA6IDEycHg7DQogIHdpZHRoOiAxMDAlOw0KDQogIC5lbC1pbnB1dC1udW1iZXIgew0KICAgIGZsZXg6IDE7DQogICAgd2lkdGg6IGF1dG87DQogICAgbWluLXdpZHRoOiAwOw0KICB9DQoNCiAgICAubnVtYmVyLXVuaXQgew0KICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7DQogICAgICBmbGV4OiBub25lOw0KICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgICAgaGVpZ2h0OiAzNnB4Ow0KICAgICAgY29sb3I6ICM2MDYyNjY7DQogICAgfQ0KfQ0KDQouZGFuZ2VyLXRleHQtYnRuIHsNCiAgY29sb3I6ICNmNTZjNmM7DQoNCiAgJjpob3ZlciB7DQogICAgY29sb3I6ICNmNzg5ODk7DQogIH0NCn0NCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8ZA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/views/teachBusiness/venue","sourcesContent":["<template>\r\n <div class=\"app-container venue-page\">\r\n <!-- 查询条件 -->\r\n <el-card shadow=\"never\" class=\"search-card\">\r\n <el-form :model=\"searchForm\" label-width=\"100px\" class=\"search-form\" @submit.native.prevent>\r\n <el-row :gutter=\"24\">\r\n <el-col :xs=\"24\" :md=\"8\">\r\n <el-form-item label=\"教室编号\">\r\n <el-input v-model=\"searchForm.jsbh\" placeholder=\"请输入教室编号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :md=\"8\">\r\n <el-form-item label=\"教室名称\">\r\n <el-input v-model=\"searchForm.jsmc\" placeholder=\"请输入教室名称\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :md=\"8\">\r\n <el-form-item label=\"教学楼代号\">\r\n <el-input v-model=\"searchForm.jxldh\" placeholder=\"请输入教学楼代号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :md=\"8\">\r\n <el-form-item label=\"教学场地类型\">\r\n <el-select v-model=\"searchForm.jxcdlx\" placeholder=\"请选择场地类型\" clearable filterable allow-create\r\n default-first-option class=\"w-full\">\r\n <el-option v-for=\"item in jxcdlxOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :md=\"8\">\r\n <el-form-item label=\"停用\">\r\n <el-select v-model=\"searchForm.ty\" placeholder=\"全部\" clearable class=\"w-full\">\r\n <el-option :value=\"true\" label=\"停用\" />\r\n <el-option :value=\"false\" label=\"正常\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :md=\"8\">\r\n <div class=\"search-actions\">\r\n <el-button type=\"primary\" icon=\"el-icon-search\" @click=\"handleQuery\">查询</el-button>\r\n <el-button icon=\"el-icon-refresh\" @click=\"handleReset\">重置</el-button>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </el-card>\r\n\r\n <!-- 数据列表 -->\r\n <el-card shadow=\"never\" class=\"table-card\">\r\n <div class=\"list-header\">\r\n <div class=\"list-title\">教室列表</div>\r\n <div class=\"list-actions\">\r\n <el-button type=\"primary\" icon=\"el-icon-plus\" @click=\"handleAdd\">新增</el-button>\r\n </div>\r\n </div>\r\n <el-table v-loading=\"loading\" :data=\"tableData\" border stripe highlight-current-row>\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column prop=\"jsbh\" label=\"教室编号\" width=\"130\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jsmc\" label=\"教室名称\" width=\"140\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jxldh\" label=\"教学楼代号\" width=\"150\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jxcdlx\" label=\"教学场地类型\" width=\"150\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jc\" label=\"简称\" width=\"100\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"rnrs\" label=\"容纳人数\" width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"mj\" label=\"面积\" width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"ksrnrs\" label=\"考试容纳人数\" width=\"110\" align=\"center\" />\r\n <el-table-column prop=\"ewyxkbs\" label=\"额外可开班数\" width=\"100\" align=\"center\" />\r\n <el-table-column label=\"虚实类型\" width=\"90\" align=\"center\">\r\n <template slot-scope=\"scope\">{{ fmtXslx(scope.row.xslx) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"停用\" width=\"80\" align=\"center\">\r\n <template slot-scope=\"scope\">\r\n <el-tag :type=\"isTrue(scope.row.ty) ? 'danger' : 'success'\" size=\"mini\">\r\n {{ isTrue(scope.row.ty) ? '停用' : '正常' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"sssb\" label=\"设施设备\" width=\"140\" show-overflow-tooltip header-align=\"center\" />\r\n <el-table-column label=\"操作\" align=\"center\" fixed=\"right\">\r\n <template slot-scope=\"scope\">\r\n <el-button type=\"text\" size=\"mini\" icon=\"el-icon-edit\" @click=\"handleEdit(scope.row)\">编辑</el-button>\r\n <el-button type=\"text\" size=\"mini\" icon=\"el-icon-delete\" class=\"danger-text-btn\" @click=\"handleDelete(scope.row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <el-pagination\r\n class=\"pagination\"\r\n background\r\n layout=\"total, sizes, prev, pager, next\"\r\n :current-page=\"pageNum\"\r\n :page-size=\"pageSize\"\r\n :total=\"total\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handlePageChange\"\r\n />\r\n </el-card>\r\n\r\n <!-- 新增/编辑弹窗 -->\r\n <el-dialog :title=\"dialog.title\" :visible.sync=\"dialog.visible\" width=\"780px\" append-to-body\r\n :close-on-click-modal=\"false\">\r\n <el-form ref=\"classroomForm\" :model=\"dialog.form\" :rules=\"rules\" label-width=\"110px\">\r\n <el-row :gutter=\"20\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教室名称\" prop=\"jsmc\">\r\n <el-input v-model=\"dialog.form.jsmc\" placeholder=\"请输入教室名称\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教学楼代号\">\r\n <el-input v-model=\"dialog.form.jxldh\" placeholder=\"请输入教学楼代号\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教学场地类型\">\r\n <el-select v-model=\"dialog.form.jxcdlx\" placeholder=\"请选择场地类型\" clearable filterable allow-create\r\n default-first-option class=\"w-full\">\r\n <el-option v-for=\"item in jxcdlxOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"简称\">\r\n <el-input v-model=\"dialog.form.jc\" placeholder=\"请输入简称\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"容纳人数\">\r\n <el-input-number v-model=\"dialog.form.rnrs\" :min=\"0\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"面积\">\r\n <div class=\"number-unit-field\">\r\n <el-input-number\r\n v-model=\"dialog.form.mj\"\r\n :min=\"0\"\r\n :precision=\"1\"\r\n controls-position=\"right\"\r\n />\r\n <span class=\"number-unit\">㎡</span>\r\n </div>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"考试容纳人数\">\r\n <el-input-number v-model=\"dialog.form.ksrnrs\" :min=\"0\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"额外可开班数\">\r\n <el-input-number v-model=\"dialog.form.ewyxkbs\" :min=\"0\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"拼音\">\r\n <el-input v-model=\"dialog.form.py\" placeholder=\"请输入拼音\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"虚实类型\">\r\n <el-radio-group v-model=\"dialog.form.xslx\">\r\n <el-radio :label=\"true\">实教</el-radio>\r\n <el-radio :label=\"false\">非实教</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"停用\">\r\n <el-radio-group v-model=\"dialog.form.ty\">\r\n <el-radio :label=\"false\">正常</el-radio>\r\n <el-radio :label=\"true\">停用</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"设施设备\">\r\n <el-input v-model=\"dialog.form.sssb\" placeholder=\"请输入设施设备\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"备注\">\r\n <el-input v-model=\"dialog.form.bz\" type=\"textarea\" :rows=\"2\" placeholder=\"请输入备注\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"dialog.visible = false\">取 消</el-button>\r\n <el-button type=\"primary\" :loading=\"dialog.submitting\" @click=\"submitDialog\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport {\r\n addClassroom,\r\n deleteClassroom,\r\n updateClassroom,\r\n listClassroom,\r\n listAllClassroom\r\n} from '@/api/teachBusiness/classroom'\r\n\r\nexport default {\r\n name: 'Venue',\r\n data() {\r\n return {\r\n loading: false,\r\n searchForm: {\r\n jsbh: '',\r\n jsmc: '',\r\n jxldh: '',\r\n jxcdlx: '',\r\n ty: ''\r\n },\r\n tableData: [],\r\n jxcdlxOptions: [],\r\n total: 0,\r\n pageNum: 1,\r\n pageSize: 20,\r\n dialog: {\r\n visible: false,\r\n title: '',\r\n submitting: false,\r\n form: this.createEmptyForm()\r\n },\r\n rules: {\r\n jsmc: [{ required: true, message: '请输入教室名称', trigger: 'blur' }]\r\n }\r\n }\r\n },\r\n created() {\r\n this.loadVenueTypeOptions()\r\n this.fetchList()\r\n },\r\n methods: {\r\n /**\r\n * 独立加载全部场地类型,避免查询结果收窄后下拉候选项同步丢失。\r\n */\r\n loadVenueTypeOptions() {\r\n return listAllClassroom().then(response => {\r\n this.jxcdlxOptions = this.collectVenueTypes(response.data || [])\r\n }).catch(() => {\r\n // 全量接口异常时保留已收集选项,避免影响列表的基本查询功能。\r\n this.mergeVenueTypeOptions(this.tableData)\r\n })\r\n },\r\n\r\n collectVenueTypes(classrooms) {\r\n const venueTypes = new Set()\r\n classrooms.forEach(classroom => {\r\n const venueType = classroom.jxcdlx && String(classroom.jxcdlx).trim()\r\n if (venueType) {\r\n venueTypes.add(venueType)\r\n }\r\n })\r\n\r\n return Array.from(venueTypes).sort((first, second) => first.localeCompare(second, 'zh-CN'))\r\n },\r\n\r\n mergeVenueTypeOptions(classrooms) {\r\n const venueTypes = new Set(this.jxcdlxOptions)\r\n this.collectVenueTypes(classrooms).forEach(venueType => venueTypes.add(venueType))\r\n this.jxcdlxOptions = Array.from(venueTypes)\r\n .sort((first, second) => first.localeCompare(second, 'zh-CN'))\r\n },\r\n\r\n /* ---------- 列表加载 ---------- */\r\n fetchList() {\r\n this.loading = true\r\n const params = {\r\n pageNum: this.pageNum,\r\n pageSize: this.pageSize\r\n }\r\n Object.keys(this.searchForm).forEach(key => {\r\n const value = this.searchForm[key]\r\n if (value !== '' && value !== null && value !== undefined) {\r\n params[key] = value\r\n }\r\n })\r\n listClassroom(params).then(response => {\r\n const data = response.data || {}\r\n this.tableData = data.records || []\r\n this.mergeVenueTypeOptions(this.tableData)\r\n this.total = data.total || 0\r\n }).catch(() => {\r\n this.tableData = []\r\n this.total = 0\r\n }).finally(() => {\r\n this.loading = false\r\n })\r\n },\r\n\r\n /* ---------- 查询 / 重置 ---------- */\r\n handleQuery() {\r\n this.pageNum = 1\r\n this.fetchList()\r\n },\r\n handleReset() {\r\n this.searchForm = {\r\n jsbh: '',\r\n jsmc: '',\r\n jxldh: '',\r\n jxcdlx: '',\r\n ty: ''\r\n }\r\n this.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n /* ---------- 分页 ---------- */\r\n handleSizeChange(size) {\r\n this.pageSize = size\r\n this.pageNum = 1\r\n this.fetchList()\r\n },\r\n handlePageChange(page) {\r\n this.pageNum = page\r\n this.fetchList()\r\n },\r\n\r\n /* ---------- 新增 / 编辑 ---------- */\r\n handleAdd() {\r\n this.dialog.title = '新增教学场地'\r\n this.dialog.form = this.createEmptyForm()\r\n this.dialog.visible = true\r\n this.$nextTick(() => {\r\n if (this.$refs.classroomForm) this.$refs.classroomForm.clearValidate()\r\n })\r\n },\r\n handleEdit(row) {\r\n this.dialog.title = '编辑教学场地'\r\n this.dialog.form = Object.assign({}, this.createEmptyForm(), row)\r\n this.dialog.visible = true\r\n this.$nextTick(() => {\r\n if (this.$refs.classroomForm) this.$refs.classroomForm.clearValidate()\r\n })\r\n },\r\n submitDialog() {\r\n this.$refs.classroomForm.validate(valid => {\r\n if (!valid) return\r\n this.dialog.submitting = true\r\n const payload = this.cleanPayload(this.dialog.form)\r\n const isEdit = !!payload.id\r\n const req = isEdit ? updateClassroom(payload) : addClassroom(payload)\r\n req.then(() => {\r\n this.$message.success(isEdit ? '修改成功' : '新增成功')\r\n this.dialog.visible = false\r\n this.loadVenueTypeOptions()\r\n this.fetchList()\r\n }).catch(() => {}).finally(() => {\r\n this.dialog.submitting = false\r\n })\r\n })\r\n },\r\n\r\n /* ---------- 删除(后端仅提供单条删除,参数为 id) ---------- */\r\n handleDelete(row) {\r\n this.$confirm('确定删除教室「' + (row.jsmc || row.jsbh) + '」吗?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n return deleteClassroom(row.id)\r\n }).then(() => {\r\n this.$message.success('删除成功')\r\n this.loadVenueTypeOptions()\r\n this.fetchList()\r\n }).catch(() => {})\r\n },\r\n\r\n /* ---------- 工具 ---------- */\r\n createEmptyForm() {\r\n return {\r\n id: '',\r\n jsbh: '',\r\n jsmc: '',\r\n jxldh: '',\r\n jxcdlx: '',\r\n jc: '',\r\n rnrs: null,\r\n mj: null,\r\n ksrnrs: null,\r\n ewyxkbs: null,\r\n xh: '',\r\n py: '',\r\n xslx: false,\r\n ty: false,\r\n sssb: '',\r\n bz: ''\r\n }\r\n },\r\n /** 移除空值(''/null/undefined),保留 0/false 等有效值 */\r\n cleanPayload(obj) {\r\n const payload = {}\r\n Object.keys(obj).forEach(key => {\r\n const value = obj[key]\r\n if (value !== '' && value !== null && value !== undefined) {\r\n payload[key] = value\r\n }\r\n })\r\n return payload\r\n },\r\n isTrue(val) {\r\n return val === true || val === 1 || val === '1' || val === 'true'\r\n },\r\n fmtXslx(val) {\r\n return this.isTrue(val) ? '实教' : '非实教'\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.app-container {\r\n padding: 20px;\r\n}\r\n\r\n.venue-page {\r\n .search-card {\r\n margin-bottom: 16px;\r\n\r\n .search-form {\r\n .w-full {\r\n width: 100%;\r\n }\r\n\r\n .search-actions {\r\n padding-top: 4px;\r\n }\r\n }\r\n }\r\n\r\n .table-card {\r\n .list-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 16px;\r\n\r\n .list-title {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #303133;\r\n }\r\n }\r\n\r\n .pagination {\r\n margin-top: 16px;\r\n text-align: right;\r\n }\r\n }\r\n}\r\n\r\n.number-unit-field {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n width: 100%;\r\n\r\n .el-input-number {\r\n flex: 1;\r\n width: auto;\r\n min-width: 0;\r\n }\r\n\r\n .number-unit {\r\n display: inline-flex;\r\n flex: none;\r\n align-items: center;\r\n justify-content: center;\r\n height: 36px;\r\n color: #606266;\r\n }\r\n}\r\n\r\n.danger-text-btn {\r\n color: #f56c6c;\r\n\r\n &:hover {\r\n color: #f78989;\r\n }\r\n}\r\n</style>\r\n"]}]}