| | |
| | | <div class="app-container"> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> |
| | | <el-form-item label="公告标题" prop="noticeTitle"> |
| | | <el-input |
| | | v-model="queryParams.noticeTitle" |
| | | placeholder="请输入公告标题" |
| | | clearable |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | <el-input v-model="queryParams.noticeTitle" placeholder="请输入公告标题" clearable @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="操作人员" prop="createBy"> |
| | | <el-input |
| | | v-model="queryParams.createBy" |
| | | placeholder="请输入操作人员" |
| | | clearable |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | <el-input v-model="queryParams.createBy" placeholder="请输入操作人员" clearable @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="类型" prop="noticeType"> |
| | | <el-select v-model="queryParams.noticeType" placeholder="公告类型" clearable> |
| | | <el-option |
| | | v-for="dict in dict.type.sys_notice_type" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | <el-option v-for="dict in dict.type.sys_notice_type" :key="dict.value" :label="dict.label" |
| | | :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button type="primary" |
| | | icon="el-icon-plus" |
| | | size="mini" |
| | | @click="handleAdd" |
| | | v-hasPermi="['system:notice:add']" |
| | | >新增</el-button> |
| | | <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd" |
| | | v-hasPermi="['system:notice:add']">新增</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button type="primary" |
| | | icon="el-icon-edit" |
| | | size="mini" |
| | | :disabled="single" |
| | | @click="handleUpdate" |
| | | v-hasPermi="['system:notice:edit']" |
| | | >修改</el-button> |
| | | <el-button type="primary" icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" |
| | | v-hasPermi="['system:notice:edit']">修改</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button type="primary" |
| | | icon="el-icon-delete" |
| | | size="mini" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | v-hasPermi="['system:notice:remove']" |
| | | >删除</el-button> |
| | | <el-button type="primary" icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" |
| | | v-hasPermi="['system:notice:remove']">删除</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange"> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="noticeList" |
| | | @selection-change="handleSelectionChange" |
| | | :row-class-name="tableRowClassName" |
| | | ref="table" |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="序号" align="center" prop="noticeId" width="100" /> |
| | | <el-table-column |
| | | label="公告标题" |
| | | align="center" |
| | | prop="noticeTitle" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="公告标题" align="center" prop="noticeTitle" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="公告类型" align="center" prop="noticeType" width="100"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_notice_type" :value="scope.row.noticeType"/> |
| | | <dict-tag :options="dict.type.sys_notice_type" :value="scope.row.noticeType" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="状态" align="center" prop="status" width="100"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_notice_status" :value="scope.row.status"/> |
| | | <dict-tag :options="dict.type.sys_notice_status" :value="scope.row.status" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="接收科室" align="center" prop="deptId" width="150"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ getDeptNames(scope.row.deptId) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="接收用户" align="center" prop="userIds" width="200" :show-overflow-tooltip="true"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ getUserNames(scope.row.userIds) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="创建者" align="center" prop="createBy" width="100" /> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['system:notice:edit']" |
| | | >修改</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | v-hasPermi="['system:notice:remove']" |
| | | >删除</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-share" |
| | | @click="handledetails(scope.row)" |
| | | v-hasPermi="['system:notice:remove']" |
| | | >详情</el-button> |
| | | <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['system:notice:edit']">修改</el-button> |
| | | <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" |
| | | v-hasPermi="['system:notice:remove']">删除</el-button> |
| | | <el-button size="mini" type="text" icon="el-icon-share" @click="handledetails(scope.row)" |
| | | v-hasPermi="['system:notice:query']">详情</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <div class="pag"> |
| | | <div class="pag1"> |
| | | <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" @pagination="getList" /> |
| | | </div> |
| | | </div> |
| | | <div class="pagination-container"> |
| | | <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" @pagination="getList" /> |
| | | </div> |
| | | |
| | | <!-- 添加或修改公告对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="780px" append-to-body> |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item label="公告类型" prop="noticeType"> |
| | | <el-select v-model="form.noticeType" placeholder="请选择公告类型"> |
| | | <el-option |
| | | v-for="dict in dict.type.sys_notice_type" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | ></el-option> |
| | | <el-option v-for="dict in dict.type.sys_notice_type" :key="dict.value" :label="dict.label" |
| | | :value="dict.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12" v-if="form.noticeType == 1"> |
| | | <el-form-item label="通知人员" prop="noticeType"> |
| | | <el-input v-model="form.noticeTitle" placeholder="请输入通知人员" /> |
| | | <el-col :span="12"> |
| | | <el-form-item label="接收科室" prop="deptId"> |
| | | <el-select v-model="form.deptId" filterable placeholder="请选择接收科室" @change="handleDeptChange"> |
| | | <el-option v-for="dept in deptList" :key="dept.id" :label="dept.label" :value="dept.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="接收用户" prop="userIds"> |
| | | <el-select v-model="form.userIds" multiple filterable placeholder="请选择接收用户"> |
| | | <el-option v-for="user in editUserList" :key="user.userId" :label="user.nickName || user.userName" |
| | | :value="user.userId"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="状态"> |
| | | <el-radio-group v-model="form.status"> |
| | | <el-radio |
| | | v-for="dict in dict.type.sys_notice_status" |
| | | :key="dict.value" |
| | | :label="dict.value" |
| | | >{{dict.label}}</el-radio> |
| | | <el-radio v-for="dict in dict.type.sys_notice_status" :key="dict.value" |
| | | :label="dict.value">{{ dict.label }}</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="内容"> |
| | | <editor v-model="form.noticeContent" :min-height="192"/> |
| | | <editor v-model="form.noticeContent" :min-height="192" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!--通知公告详情 --> |
| | | <!-- 通知公告详情 --> |
| | | <el-dialog :title="formIn.noticeTitle" :visible.sync="openDetail" width="800px" append-to-body> |
| | | <div style="margin-top:-20px;margin-bottom:10px;"> |
| | | <el-tag size="mini" effect="dark" type="warning" v-if="form.noticeType==2">公告</el-tag> |
| | | <div class="detail-header"> |
| | | <el-tag size="mini" effect="dark" type="warning" v-if="formIn.noticeType === '2'">公告</el-tag> |
| | | <el-tag size="mini" effect="dark" v-else>通知</el-tag> |
| | | <span style="margin-left:20px;">{{formIn.createTime}}</span> |
| | | <span class="time">{{ parseTime(formIn.createTime, '{y}-{m}-{d} {h}:{i}:{s}') || '无' }}</span> |
| | | </div> |
| | | <div class="content"> |
| | | <div v-html="formIn.noticeContent" style="margin-left:0px;margin-right:76px" class="ql-editor"></div> |
| | | <div class="detail-item"> |
| | | <span class="label">接收科室:</span> |
| | | <span>{{ getDeptNames(formIn.deptId) }}</span> |
| | | </div> |
| | | <div class="detail-item"> |
| | | <span class="label">接收用户:</span> |
| | | <span>{{ getUserNames(formIn.userIds) }}</span> |
| | | </div> |
| | | <div class="detail-content"> |
| | | <div v-html="formIn.noticeContent" class="ql-editor"></div> |
| | | </div> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="cancel"> 关 闭 </el-button> |
| | | <el-button type="primary" @click="cancel">关闭</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { listNotice, getNotice, delNotice, addNotice, updateNotice } from "@/api/system/notice"; |
| | | import { deptTreeSelect } from "@/api/system/dept"; |
| | | import { listUser1 } from "@/api/system/user"; |
| | | |
| | | export default { |
| | | name: "Notice", |
| | | dicts: ['sys_notice_status', 'sys_notice_type'], |
| | | dicts: ["sys_notice_status", "sys_notice_type"], |
| | | data() { |
| | | let checkPhoneNum = (rule, value, callback) => { |
| | | console.log( value) |
| | | let patter = new RegExp(/^1\s*[3456789]\s*(\d\s*){9}$/); |
| | | if (value == "" && value == undefined && !value) { |
| | | return callback(''); |
| | | } else if(value != undefined && value != ""){ |
| | | return callback(); |
| | | }else if (!patter.test(value)) { |
| | | return callback(''); |
| | | } |
| | | }; |
| | | return { |
| | | // 遮罩层 |
| | | loading: true, |
| | | openDetail:false, |
| | | openDetail: false, |
| | | // 选中数组 |
| | | ids: [], |
| | | // 非单个禁用 |
| | |
| | | total: 0, |
| | | // 公告表格数据 |
| | | noticeList: [], |
| | | // 科室列表 |
| | | deptList: [], |
| | | // 用户列表(全局,用于表格和详情) |
| | | userList: [], |
| | | // 用户列表(用于编辑对话框) |
| | | editUserList: [], |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | // 是否为初次加载 |
| | | isInitialLoad: true, |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | noticeTitle: undefined, |
| | | createBy: undefined, |
| | | status: undefined |
| | | noticeType: undefined, |
| | | }, |
| | | formIn:{}, |
| | | formIn: {}, |
| | | // 表单参数 |
| | | form: {}, |
| | | form: { |
| | | noticeId: undefined, |
| | | noticeTitle: undefined, |
| | | noticeType: undefined, |
| | | noticeContent: undefined, |
| | | status: "0", |
| | | deptId: undefined, |
| | | userIds: [], |
| | | }, |
| | | // 表单校验 |
| | | rules: { |
| | | noticeTitle: [ |
| | | { required: true, validator: checkPhoneNum, trigger: "blur" } |
| | | noticeTitle: [{ required: true, message: "公告标题不能为空", trigger: "blur" }], |
| | | noticeType: [{ required: true, message: "公告类型不能为空", trigger: "change" }], |
| | | deptId: [ |
| | | { |
| | | required: false, |
| | | message: "请选择接收科室", |
| | | trigger: "change", |
| | | validator: (rule, value, callback) => { |
| | | callback(); // 非必填 |
| | | }, |
| | | }, |
| | | ], |
| | | noticeType: [ |
| | | { required: true, validator: checkPhoneNum, trigger: "change" } |
| | | ] |
| | | } |
| | | userIds: [ |
| | | { |
| | | required: false, |
| | | message: "请选择接收用户", |
| | | trigger: "change", |
| | | validator: (rule, value, callback) => { |
| | | callback(); // 非必填 |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | // 获取科室列表 |
| | | deptTreeSelect() |
| | | .then((response) => { |
| | | this.deptList = response.data || []; |
| | | this.deptList = this.flattenDeptList(this.deptList); |
| | | console.log("Flattened deptList:", this.deptList); |
| | | }) |
| | | .catch((error) => { |
| | | this.$modal.msgError("获取科室列表失败:" + error.message); |
| | | }); |
| | | // 预加载所有用户列表(用于表格和详情) |
| | | listUser1({}) |
| | | .then((response) => { |
| | | this.userList = (response.rows || response.data || []).map(user => ({ |
| | | ...user, |
| | | userId: String(user.userId), |
| | | })); |
| | | this.editUserList = [...this.userList]; // 初始化编辑用户列表 |
| | | console.log("Preloaded userList:", this.userList); |
| | | }) |
| | | .catch((error) => { |
| | | this.$modal.msgError("获取用户列表失败:" + error.message); |
| | | }); |
| | | // 处理跳转参数 |
| | | this.handleRouteParams(); |
| | | }, |
| | | methods: { |
| | | /** 查询公告列表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | listNotice(this.queryParams).then(response => { |
| | | listNotice(this.queryParams).then((response) => { |
| | | this.noticeList = response.rows; |
| | | this.total = response.total; |
| | | this.loading = false; |
| | | // 高亮或打开详情(仅初次加载时触发详情) |
| | | this.$nextTick(() => { |
| | | this.highlightNotice(this.isInitialLoad); |
| | | this.isInitialLoad = false; // 标记为非初次加载 |
| | | }); |
| | | }).catch((error) => { |
| | | console.error("listNotice error:", error); |
| | | this.$modal.msgError("获取公告列表失败:" + error.message); |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | /** 处理路由参数 */ |
| | | handleRouteParams() { |
| | | const { noticeId } = this.$route.query; |
| | | if (noticeId) { |
| | | this.queryParams.noticeId = noticeId; |
| | | this.getList(); |
| | | } |
| | | }, |
| | | /** 高亮或打开公告详情 */ |
| | | highlightNotice(isInitialLoad) { |
| | | const { noticeId } = this.$route.query; |
| | | if (noticeId) { |
| | | const notice = this.noticeList.find(item => item.noticeId === noticeId); |
| | | if (notice) { |
| | | this.$refs.table.setCurrentRow(notice); |
| | | if (isInitialLoad) { |
| | | this.handledetails(notice); // 仅初次加载时打开详情 |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | /** 表格行类名 */ |
| | | tableRowClassName({ row }) { |
| | | const { noticeId } = this.$route.query; |
| | | return noticeId && row.noticeId === noticeId ? 'highlight-row' : ''; |
| | | }, |
| | | /** 将科室ID转换为科室名称 */ |
| | | getDeptNames(deptId) { |
| | | if (!deptId) return "无"; |
| | | const dept = this.deptList.find((dept) => dept.id === deptId); |
| | | return dept ? dept.label : "未知科室"; |
| | | }, |
| | | /** 将用户ID转换为用户名 */ |
| | | getUserNames(userIds) { |
| | | if (!userIds) return "无"; |
| | | const ids = typeof userIds === "string" ? userIds.split(",") : userIds; |
| | | const names = this.userList |
| | | .filter((user) => ids.includes(user.userId)) |
| | | .map((user) => user.nickName || user.userName) |
| | | .join(", "); |
| | | return names || ids.join(", "); |
| | | }, |
| | | /** 展平部门树形结构 */ |
| | | flattenDeptList(depts, result = []) { |
| | | depts.forEach((dept) => { |
| | | result.push({ id: String(dept.id), label: dept.label }); |
| | | if (dept.children && dept.children.length) { |
| | | this.flattenDeptList(dept.children, result); |
| | | } |
| | | }); |
| | | return result; |
| | | }, |
| | | /** 科室选择变化时调用 */ |
| | | handleDeptChange(deptId) { |
| | | if (deptId) { |
| | | this.editUserList = []; |
| | | return listUser1({ deptId }) |
| | | .then((response) => { |
| | | this.editUserList = (response.rows || response.data || []).map(user => ({ |
| | | ...user, |
| | | userId: String(user.userId), |
| | | })); |
| | | console.log("Fetched editUserList for deptId", deptId, ":", this.editUserList); |
| | | }) |
| | | .catch((error) => { |
| | | this.$modal.msgError("获取用户列表失败:" + error.message); |
| | | this.editUserList = [...this.userList]; // 回退到全局用户列表 |
| | | }); |
| | | } else { |
| | | console.log("No deptId, retained form.userIds:", this.form.userIds); |
| | | this.editUserList = [...this.userList]; // 恢复为全局用户列表 |
| | | return Promise.resolve(); |
| | | } |
| | | }, |
| | | // 取消按钮 |
| | | cancel() { |
| | | console.log("Cancel triggered, resetting form and closing dialogs"); |
| | | this.open = false; |
| | | this.openDetail = false, |
| | | this.openDetail = false; |
| | | this.reset(); |
| | | }, |
| | | // 表单重置 |
| | |
| | | noticeTitle: undefined, |
| | | noticeType: undefined, |
| | | noticeContent: undefined, |
| | | status: "0" |
| | | status: "0", |
| | | deptId: undefined, |
| | | userIds: [], |
| | | }; |
| | | this.editUserList = [...this.userList]; // 重置为全局用户列表 |
| | | this.resetForm("form"); |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | |
| | | }, |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.noticeId) |
| | | this.single = selection.length!=1 |
| | | this.multiple = !selection.length |
| | | this.ids = selection.map((item) => item.noticeId); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | console.log("handleAdd triggered"); |
| | | this.reset(); |
| | | this.open = true; |
| | | this.title = "添加公告"; |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | handleUpdate(row) { |
| | | console.log("handleUpdate triggered for noticeId:", row.noticeId); |
| | | this.reset(); |
| | | const noticeId = row.noticeId || this.ids |
| | | getNotice(noticeId).then(response => { |
| | | this.form = response.data; |
| | | this.open = true; |
| | | this.title = "修改公告"; |
| | | }); |
| | | const noticeId = row.noticeId || this.ids; |
| | | getNotice(noticeId) |
| | | .then((response) => { |
| | | console.log("getNotice response:", response.data); |
| | | const data = response.data; |
| | | this.form = { |
| | | noticeId: data.noticeId, |
| | | noticeTitle: data.noticeTitle, |
| | | noticeType: data.noticeType, |
| | | noticeContent: data.noticeContent, |
| | | status: data.status, |
| | | deptId: data.deptId ? String(data.deptId) : undefined, |
| | | userIds: data.userIds ? (typeof data.userIds === 'string' ? data.userIds.split(',') : data.userIds) : [], |
| | | }; |
| | | if (this.form.deptId) { |
| | | return this.handleDeptChange(this.form.deptId).then(() => { |
| | | this.open = true; |
| | | this.title = "修改公告"; |
| | | console.log("Modification dialog opened, form:", this.form, "editUserList:", this.editUserList); |
| | | }); |
| | | } else { |
| | | this.editUserList = [...this.userList]; |
| | | console.log("No deptId, retained form.userIds:", this.form.userIds, "editUserList:", this.editUserList); |
| | | this.open = true; |
| | | this.title = "修改公告"; |
| | | console.log("Modification dialog opened, form:", this.form); |
| | | return Promise.resolve(); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error("getNotice error:", error); |
| | | this.$modal.msgError("获取公告详情失败:" + error.message); |
| | | }); |
| | | }, |
| | | |
| | | handledetails(row){ |
| | | /** 详情按钮操作 */ |
| | | handledetails(row) { |
| | | console.log("handledetails triggered for noticeId:", row.noticeId); |
| | | this.formIn = row; |
| | | this.openDetail = true; |
| | | console.log("Detail dialog opened, formIn:", this.formIn); |
| | | }, |
| | | /** 提交按钮 */ |
| | | submitForm: function() { |
| | | this.$refs["form"].validate(valid => { |
| | | submitForm() { |
| | | console.log("submitForm triggered, form:", this.form); |
| | | this.$refs["form"].validate((valid) => { |
| | | if (valid) { |
| | | if (this.form.noticeId != undefined) { |
| | | updateNotice(this.form).then(response => { |
| | | const formData = { |
| | | ...this.form, |
| | | deptId: this.form.deptId ? String(this.form.deptId) : "", |
| | | userIds: this.form.userIds || [], |
| | | }; |
| | | console.log("Submitting formData:", formData); |
| | | if (formData.noticeId != undefined) { |
| | | updateNotice(formData).then((response) => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }).catch((error) => { |
| | | console.error("updateNotice error:", error); |
| | | this.$modal.msgError("修改失败:" + error.message); |
| | | }); |
| | | } else { |
| | | addNotice(this.form).then(response => { |
| | | addNotice(formData).then((response) => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }).catch((error) => { |
| | | console.error("addNotice error:", error); |
| | | this.$modal.msgError("新增失败:" + error.message); |
| | | }); |
| | | } |
| | | } |
| | |
| | | }, |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const noticeIds = row.noticeId || this.ids |
| | | this.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?').then(function() { |
| | | return delNotice(noticeIds); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }).catch(() => {}); |
| | | console.log("handleDelete triggered for noticeId:", row.noticeId); |
| | | const noticeIds = row.noticeId || this.ids; |
| | | this.$modal |
| | | .confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?') |
| | | .then(() => delNotice(noticeIds)) |
| | | .then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | /** 时间格式化 */ |
| | | parseTime(time, cFormat = '{y}-{m}-{d} {h}:{i}:{s}') { |
| | | if (!time) return ''; |
| | | try { |
| | | const date = new Date(time); |
| | | if (isNaN(date.getTime())) return ''; |
| | | const formatObj = { |
| | | y: date.getFullYear(), |
| | | m: String(date.getMonth() + 1).padStart(2, '0'), |
| | | d: String(date.getDate()).padStart(2, '0'), |
| | | h: String(date.getHours()).padStart(2, '0'), |
| | | i: String(date.getMinutes()).padStart(2, '0'), |
| | | s: String(date.getSeconds()).padStart(2, '0') |
| | | }; |
| | | return cFormat.replace(/{([ymdhis]+)}/g, (result, key) => formatObj[key] || ''); |
| | | } catch (error) { |
| | | console.error('parseTime error:', error, 'time:', time); |
| | | return ''; |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .pag { |
| | | width: 100%; |
| | | /* 容器样式,确保内容有适当内边距 */ |
| | | .app-container { |
| | | padding: 20px; |
| | | } |
| | | |
| | | /* 分页容器,替换原 .pag 和 .pag1,居中显示 */ |
| | | .pagination-container { |
| | | display: flex; |
| | | justify-content: center; |
| | | margin-top: 20px; |
| | | } |
| | | .pag1{ |
| | | width: 30%; |
| | | |
| | | /* 高亮行样式,突出显示路由指定的公告 */ |
| | | .highlight-row { |
| | | background-color: #e6f7ff; |
| | | } |
| | | </style> |
| | | |
| | | /* 对话框底部按钮居中 */ |
| | | .dialog-footer { |
| | | text-align: center; |
| | | padding: 10px 0; |
| | | } |
| | | |
| | | /* 详情对话框头部(类型标签和时间) */ |
| | | .detail-header { |
| | | margin: -20px 0 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .detail-header .time { |
| | | margin-left: 20px; |
| | | color: #606266; |
| | | } |
| | | |
| | | /* 详情对话框信息项(接收科室、接收用户) */ |
| | | .detail-item { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .detail-item .label { |
| | | font-weight: bold; |
| | | color: #303133; |
| | | } |
| | | |
| | | /* 详情对话框内容区域,限制富文本高度 */ |
| | | .detail-content .ql-editor { |
| | | max-height: 300px; |
| | | overflow-y: auto; |
| | | padding: 10px; |
| | | color: #303133; |
| | | } |
| | | |
| | | /* 表格操作列,优化按钮间距 */ |
| | | .small-padding { |
| | | padding: 0 10px; |
| | | } |
| | | |
| | | /* 搜索表单顶部间距 */ |
| | | .mb8 { |
| | | margin-bottom: 8px; |
| | | } |
| | | </style> |