最新公众号管理系统前端页面

This commit is contained in:
sangchengzhi
2026-01-14 16:44:36 +08:00
commit d55c6155ea
643 changed files with 62420 additions and 0 deletions

View File

@@ -0,0 +1,227 @@
<template>
<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="userId">
<el-input v-model="queryParams.userId" placeholder="请输入用户号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="类型" prop="black">
<el-select v-model="queryParams.black" placeholder="请选择类型" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.BLACKLIST_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:blacklist:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:blacklist:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="表id" align="center" prop="id" />
<el-table-column label="用户号" align="center" prop="userId" />
<el-table-column label="类型" align="center" prop="black">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.BLACKLIST_TYPE" :value="scope.row.black" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:blacklist:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:blacklist:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户号" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户号" />
</el-form-item>
<el-form-item label="类型" prop="black">
<el-select v-model="form.black" placeholder="请选择类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.BLACKLIST_TYPE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createBlacklist, updateBlacklist, deleteBlacklist, getBlacklist, getBlacklistPage, exportBlacklistExcel } from "@/api/system/blacklist";
export default {
name: "Blacklist",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 黑名单列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
userId: null,
black: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getBlacklistPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
userId: undefined,
black: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加黑名单";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getBlacklist(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改黑名单";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateBlacklist(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createBlacklist(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除黑名单编号为"' + id + '"的数据项?').then(function() {
return deleteBlacklist(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有黑名单数据项?').then(() => {
this.exportLoading = true;
return exportBlacklistExcel(params);
}).then(response => {
this.$download.excel(response, '黑名单.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,311 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入大楼名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="大楼状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择大楼状态0正常 1停用" clearable size="small">
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:building:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">展开/折叠</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<!-- <el-table v-loading="loading" :data="list"> -->
<el-table v-if="refreshTable" v-loading="loading" :data="list" row-key="id" :default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<!-- <el-table-column label="大楼id" align="center" prop="id" /> -->
<el-table-column label="大楼名称" prop="name" />
<!-- <el-table-column label="父大楼id" align="center" prop="parentId" /> -->
<el-table-column label="楼层" align="center" prop="fid" />
<el-table-column label="大楼状态" align="center" prop="status" >
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:building:update']">修改</el-button>
<el-button v-if="scope.row.parentId == 0" size="mini" type="text" icon="el-icon-plus" @click="handleAdd(scope.row)"
v-hasPermi="['system:building:create']">新增</el-button>
<el-button v-if="scope.row.parentId !== 0" size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)" v-hasPermi="['system:building:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/> -->
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="所属大楼" prop="parentId">
<treeselect v-model="form.parentId" :options="buildingOptions" :normalizer="normalizer" :flat="true" placeholder="选择大楼" />
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="请输入大楼名称" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="form.status" placeholder="请选择状态0正常 1停用" clearable size="small">
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item label="楼层" prop="fid">
<el-input v-model="form.fid" placeholder="请输入楼层id,初始为0" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listBuilding, listSimpleBuildings, createBuilding, updateBuilding, deleteBuilding, getBuilding, getBuildingPage, exportBuildingExcel } from "@/api/system/building";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
import {CommonStatusEnum} from '@/utils/constants'
export default {
name: "Building",
components: {
Treeselect
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
// total: 0,
// 楼层导视列表
list: [],
// 部门树选项
buildingOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 是否展开,默认全部展开
isExpandAll: true,
// 重新渲染表格状态
refreshTable: true,
// 是否展开
expand: false,
// 查询参数
queryParams: {
// pageNo: 1,
// pageSize: 10,
// parentId: null,
name: null,
status: null,
// fid: null,
// createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
name: [{ required: true, message: "大楼名称不能为空", trigger: "blur" }],
// parentId: [{ required: true, message: "父大楼id不能为空", trigger: "blur" }],
status: [{ required: true, message: "大楼状态0正常 1停用不能为空", trigger: "blur" }],
},
// 枚举
CommonStatusEnum: CommonStatusEnum,
// 数据字典
statusDictDatas: getDictDatas(DICT_TYPE.BUILDING_STATUS)
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
listBuilding(this.queryParams).then(response => {
// this.list = response.data.list;
this.list = this.handleTree(response.data, "id");
// this.total = response.data.total;
this.loading = false;
});
},
/** 转换数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
isDisabled: node.parentId != 0,
children: node.children
};
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
name: undefined,
parentId: undefined,
status: undefined,
fid: undefined,
status: CommonStatusEnum.ENABLE,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
if (row !== undefined) {
this.form.parentId = row.id;
}
this.open = true;
this.title = "添加";
getBuildingPage().then(response => {
this.buildingOptions = this.handleTree(response.data.list, "id");
});
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
getBuilding(row.id).then(response => {
this.form = response.data;
if (this.form.parentId === 0) { // 无父部门时,标记为 undefined避免展示为 Unknown
this.form.parentId = undefined;
}
this.open = true;
this.title = "修改部门";
});
listBuilding(row.id).then(response => {
this.buildingOptions = this.handleTree(response.data, "id");
});
// const id = row.id;
// getBuilding(id).then(response => {
// this.form = response.data;
// this.open = true;
// this.title = "修改楼层导视";
// });
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateBuilding(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createBuilding(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').then(function() {
return deleteBuilding(row.id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
// const id = row.id;
// this.$modal.confirm('是否确认删除楼层导视编号为"' + id + '"的数据项?').then(function() {
// return deleteBuilding(id);
// }).then(() => {
// this.getList();
// this.$modal.msgSuccess("删除成功");
// }).catch(() => {});
}
/** 导出按钮操作 */
// handleExport() {
// // 处理查询参数
// let params = {...this.queryParams};
// params.pageNo = undefined;
// params.pageSize = undefined;
// this.$modal.confirm('是否确认导出所有楼层导视数据项?').then(() => {
// this.exportLoading = true;
// return exportBuildingExcel(params);
// }).then(response => {
// this.$download.excel(response, '楼层导视.xls');
// this.exportLoading = false;
// }).catch(() => {});
// }
}
};
</script>

View File

@@ -0,0 +1,351 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户id" prop="userId">
<el-input v-model="queryParams.userId" placeholder="请输入用户id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="真实姓名" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入真实姓名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="身份证" prop="idNo">
<el-input v-model="queryParams.idNo" placeholder="请输入身份证" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="联系电话" prop="phone">
<el-input v-model="queryParams.phone" placeholder="请输入联系电话" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="就诊卡号" prop="cardNo">
<el-input v-model="queryParams.cardNo" placeholder="请输入就诊卡号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="是否默认 " prop="isYes">
<el-select v-model="queryParams.isYes" placeholder="请选择是否默认 " clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.USER_CARD_IS_YES)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="病人id" prop="patientId">
<el-input v-model="queryParams.patientId" placeholder="请输入病人id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="ctime">
<el-date-picker v-model="queryParams.ctime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:card:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:card:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="表id" align="center" prop="id" />
<el-table-column label="用户id" align="center" prop="userId" />
<el-table-column label="真实姓名" align="center" prop="name" />
<el-table-column label="身份证" align="center" prop="idNo" />
<el-table-column label="联系电话" align="center" prop="phone" />
<el-table-column label="就诊卡号" align="center" prop="cardNo" />
<el-table-column label="费用类别" align="center" prop="identity" />
<el-table-column label="是否默认 " align="center" prop="isYes">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.USER_CARD_IS_YES" :value="scope.row.isYes" />
</template>
</el-table-column>
<el-table-column label="病人id" align="center" prop="patientId" />
<el-table-column label="创建时间" align="center" prop="ctime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.ctime, '{y}-{m}-{d}') }}</span>
</template>
</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:card:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:card:delete']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-shield" @click="handleBlacklist(scope.row)"
v-hasPermi="['system:nxbalcklist:create']">拉黑</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户id" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户id" />
</el-form-item>
<el-form-item label="真实姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入真实姓名" />
</el-form-item>
<el-form-item label="身份证" prop="idNo">
<el-input v-model="form.idNo" placeholder="请输入身份证" />
</el-form-item>
<el-form-item label="联系电话" prop="phone">
<el-input v-model="form.phone" placeholder="请输入联系电话" />
</el-form-item>
<el-form-item label="就诊卡号" prop="cardNo">
<el-input v-model="form.cardNo" placeholder="请输入就诊卡号" />
</el-form-item>
<el-form-item label="是否默认 " prop="isYes">
<el-select v-model="form.isYes" placeholder="请选择是否默认 ">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.USER_CARD_IS_YES)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="病人id" prop="patientId">
<el-input v-model="form.patientId" placeholder="请输入病人id" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 拉黑对话框 -->
<el-dialog :title="'拉黑用户'" :visible.sync="blacklistOpen" width="500px" append-to-body>
<el-form ref="blacklistForm" :model="blacklistForm" :rules="blacklistRules" label-width="80px">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="blacklistForm.userId" placeholder="用户ID" disabled />
</el-form-item>
<el-form-item label="拉黑类型" prop="black">
<el-select v-model="blacklistForm.black" placeholder="请选择拉黑类型">
<el-option label="挂号黑名单" value="1" />
<el-option label="体检预约黑名单" value="2" />
<el-option label="全部" value="3" />
<el-option label="登录黑名单" value="4" />
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitBlacklist"> </el-button>
<el-button @click="cancelBlacklist"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createCard, updateCard, deleteCard, getCard, getCardPage, exportCardExcel } from "@/api/system/card";
import { createnxbalcklist } from "@/api/system/nxbalcklist";
import { DICT_TYPE } from "@/utils/dict";
import DictTag from "@/components/DictTag";
export default {
name: "Card",
components: {
DictTag
},
data() {
return {
DICT_TYPE,
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 就诊卡列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
userId: null,
name: null,
idNo: null,
phone: null,
cardNo: null,
isYes: null,
patientId: null,
ctime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
},
// 黑名单弹窗参数
blacklistOpen: false,
// 黑名单表单
blacklistForm: {
userId: null,
black: null
},
// 黑名单表单校验
blacklistRules: {
black: [
{ required: true, message: '请选择拉黑类型', trigger: 'change' }
]
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getCardPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
userId: undefined,
name: undefined,
idNo: undefined,
phone: undefined,
cardNo: undefined,
isYes: undefined,
patientId: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加就诊卡";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getCard(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改就诊卡";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateCard(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createCard(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除就诊卡编号为"' + id + '"的数据项?').then(function() {
return deleteCard(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有就诊卡数据项?').then(() => {
this.exportLoading = true;
return exportCardExcel(params);
}).then(response => {
this.$download.excel(response, '就诊卡.xls');
this.exportLoading = false;
}).catch(() => {});
},
/** 处理拉黑按钮操作 */
handleBlacklist(row) {
this.blacklistForm.userId = row.userId;
this.blacklistForm.black = null;
this.blacklistOpen = true;
},
/** 取消拉黑操作 */
cancelBlacklist() {
this.blacklistOpen = false;
this.resetBlacklistForm();
},
/** 重置拉黑表单 */
resetBlacklistForm() {
this.blacklistForm = {
userId: null,
black: null
};
this.resetForm("blacklistForm");
},
/** 提交拉黑表单 */
submitBlacklist() {
this.$refs['blacklistForm'].validate(valid => {
if (!valid) {
return;
}
this.$modal.confirm('确认要将此用户添加到黑名单吗?').then(() => {
return createnxbalcklist({
userId: this.blacklistForm.userId,
black: this.blacklistForm.black
});
}).then(() => {
this.$modal.msgSuccess("添加到黑名单成功");
this.blacklistOpen = false;
this.resetBlacklistForm();
}).catch(() => {});
});
}
}
};
</script>

View File

@@ -0,0 +1,321 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="部门名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入部门名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="菜单状态" clearable>
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:dept:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">展开/折叠</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-if="refreshTable" v-loading="loading" :data="deptList" row-key="id" :default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column prop="name" label="部门名称" width="260"></el-table-column>
<el-table-column prop="leader" label="负责人" :formatter="userNicknameFormat" width="120"/>
<el-table-column prop="sort" label="排序" width="200"></el-table-column>
<el-table-column prop="status" label="状态" width="100">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:dept:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-plus" @click="handleAdd(scope.row)"
v-hasPermi="['system:dept:create']">新增</el-button>
<!-- <el-button v-if="scope.row.parentId !== 0" size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)" v-hasPermi="['system:dept:delete']">删除</el-button> -->
<el-button size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)" v-hasPermi="['system:dept:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改部门对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="24">
<el-form-item label="上级部门" prop="parentId">
<treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门名称" prop="name">
<el-input v-model="form.name" placeholder="请输入部门名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="负责人" prop="leaderUserId">
<el-select v-model="form.leaderUserId" placeholder="请输入负责人" clearable style="width: 100%">
<el-option v-for="item in users" :key="parseInt(item.id)" :label="item.nickname" :value="parseInt(item.id)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="parseInt(dict.value)">
{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listDept, getDept, delDept, addDept, updateDept } from "@/api/system/dept";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import {CommonStatusEnum} from '@/utils/constants'
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
import {listSimpleUsers} from "@/api/system/user";
export default {
name: "Dept",
components: { Treeselect },
data() {
return {
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 表格树数据
deptList: [],
// 部门树选项
deptOptions: [],
// 用户下拉列表
users: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 是否展开,默认全部展开
isExpandAll: true,
// 重新渲染表格状态
refreshTable: true,
// 是否展开
expand: false,
// 状态数据字典
statusOptions: [],
// 查询参数
queryParams: {
name: undefined,
status: undefined
},
// 表单参数
form: {},
// 表单校验
rules: {
name: [
{ required: true, message: "部门名称不能为空", trigger: "blur" }
],
sort: [
{ required: true, message: "显示排序不能为空", trigger: "blur" }
],
email: [
{
type: "email",
message: "'请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
],
phone: [
{
pattern: /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
],
status: [
{ required: true, message: "状态不能为空", trigger: "blur" }
]
},
// 枚举
CommonStatusEnum: CommonStatusEnum,
// 数据字典
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS)
};
},
created() {
this.getList();
// 获得用户列表
listSimpleUsers().then(response => {
this.users = response.data;
});
},
methods: {
/** 查询部门列表 */
getList() {
this.loading = true;
listDept(this.queryParams).then(response => {
this.deptList = this.handleTree(response.data, "id");
this.loading = false;
});
},
/** 转换部门数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children
};
},
// 用户昵称展示
userNicknameFormat(row, column) {
if (!row.leaderUserId) {
return '未设置';
}
for (const user of this.users) {
if (row.leaderUserId === user.id) {
return user.nickname;
}
}
return '未知【' + row.leaderUserId + '】';
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
parentId: undefined,
name: undefined,
sort: undefined,
leaderUserId: undefined,
phone: undefined,
email: undefined,
status: CommonStatusEnum.ENABLE,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
if (row !== undefined) {
this.form.parentId = row.id;
}
this.open = true;
this.title = "添加部门";
listDept().then(response => {
this.deptOptions = this.handleTree(response.data, "id");
});
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
getDept(row.id).then(response => {
this.form = response.data;
if (this.form.parentId === 0) { // 无父部门时,标记为 undefined避免展示为 Unknown
this.form.parentId = undefined;
}
this.open = true;
this.title = "修改部门";
});
listDept(row.id).then(response => {
this.deptOptions = this.handleTree(response.data, "id");
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updateDept(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addDept(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').then(function() {
return delDept(row.id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,306 @@
<template>
<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="dictType">
<el-select v-model="queryParams.dictType">
<el-option v-for="item in typeOptions" :key="item.id" :label="item.name" :value="item.type"/>
</el-select>
</el-form-item>
<el-form-item label="字典标签" prop="label">
<el-input v-model="queryParams.label" placeholder="请输入字典标签" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="数据状态" clearable>
<el-option v-for="dict in statusOptions" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:dict:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:dict:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="dataList" >
<el-table-column label="字典编码" align="center" prop="id" />
<el-table-column label="字典标签" align="center" prop="label" />
<el-table-column label="字典键值" align="center" prop="value" />
<el-table-column label="字典排序" align="center" prop="sort" />
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="颜色类型" align="center" prop="colorType" />
<el-table-column label="CSS Class" align="center" prop="cssClass" />
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:dict:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:dict:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="90px">
<el-form-item label="字典类型">
<el-input v-model="form.dictType" :disabled="true" />
</el-form-item>
<el-form-item label="数据标签" prop="label">
<el-input v-model="form.label" placeholder="请输入数据标签" />
</el-form-item>
<el-form-item label="数据键值" prop="value">
<el-input v-model="form.value" placeholder="请输入数据键值" />
</el-form-item>
<el-form-item label="显示排序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="颜色类型" prop="colorType">
<el-select v-model="form.colorType">
<el-option v-for="item in colorTypeOptions" :key="item.value" :label="item.label + '(' + item.value + ')'" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="CSS Class" prop="cssClass">
<el-input v-model="form.cssClass" placeholder="请输入 CSS Class" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listData, getData, delData, addData, updateData, exportData } from "@/api/system/dict/data";
import { listAllSimple, getType } from "@/api/system/dict/type";
import { CommonStatusEnum } from '@/utils/constants'
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "Data",
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 字典表格数据
dataList: [],
// 默认字典类型
defaultDictType: "",
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 状态数据字典
statusOptions: [],
// 类型数据字典
typeOptions: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
dictName: undefined,
dictType: undefined,
status: undefined
},
// 表单参数
form: {},
// 表单校验
rules: {
label: [
{ required: true, message: "数据标签不能为空", trigger: "blur" }
],
value: [
{ required: true, message: "数据键值不能为空", trigger: "blur" }
],
sort: [
{ required: true, message: "数据顺序不能为空", trigger: "blur" }
]
},
// 数据标签回显样式
colorTypeOptions: [{
value: "default",
label: "默认"
}, {
value: "primary",
label: "主要"
}, {
value: "success",
label: "成功"
}, {
value: "info",
label: "信息"
}, {
value: "warning",
label: "警告"
}, {
value: "danger",
label: "危险"
}
],
// 枚举
CommonStatusEnum: CommonStatusEnum,
// 数据字典
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS)
};
},
created() {
const dictId = this.$route.params && this.$route.params.dictId;
this.getType(dictId);
this.getTypeList();
},
methods: {
/** 查询字典类型详细 */
getType(dictId) {
getType(dictId).then(response => {
this.queryParams.dictType = response.data.type;
this.defaultDictType = response.data.type;
this.getList();
});
},
/** 查询字典类型列表 */
getTypeList() {
listAllSimple().then(response => {
this.typeOptions = response.data;
});
},
/** 查询字典数据列表 */
getList() {
this.loading = true;
listData(this.queryParams).then(response => {
this.dataList = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
label: undefined,
value: undefined,
sort: 0,
status: CommonStatusEnum.ENABLE,
colorType: 'default',
cssClass: undefined,
remark: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.queryParams.dictType = this.defaultDictType;
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加字典数据";
this.form.dictType = this.queryParams.dictType;
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getData(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改字典数据";
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updateData(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addData(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id;
this.$modal.confirm('是否确认删除字典编码为"' + ids + '"的数据项?').then(function() {
return delData(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有数据项?').then(() => {
this.exportLoading = true;
return exportData(queryParams);
}).then(response => {
this.$download.excel(response, '字典数据.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,253 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入字典名称" clearable style="width: 240px" @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="字典类型" prop="type">
<el-input v-model="queryParams.type" placeholder="请输入字典类型" clearable style="width: 240px" @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="字典状态" clearable style="width: 240px">
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:dict:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:dict:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="typeList">
<el-table-column label="字典编号" align="center" prop="id" />
<el-table-column label="字典名称" align="center" prop="name" :show-overflow-tooltip="true" />
<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
<template slot-scope="scope">
<router-link :to="'/dict/type/data/' + scope.row.id" class="link-type">
<span>{{ scope.row.type }}</span>
</router-link>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:dict:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:dict:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="字典名称" prop="name">
<el-input v-model="form.name" placeholder="请输入字典名称" />
</el-form-item>
<el-form-item label="字典类型" prop="type">
<el-input :disabled="typeof form.id !== 'undefined'" v-model="form.type" placeholder="请输入字典类型" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listType, getType, delType, addType, updateType, exportType } from "@/api/system/dict/type";
import { CommonStatusEnum } from '@/utils/constants'
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "Dict",
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 字典表格数据
typeList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 状态数据字典
statusOptions: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: undefined,
type: undefined,
status: undefined,
createTime: []
},
// 表单参数
form: {},
// 表单校验
rules: {
name: [
{ required: true, message: "字典名称不能为空", trigger: "blur" }
],
type: [
{ required: true, message: "字典类型不能为空", trigger: "blur" }
]
},
// 枚举
CommonStatusEnum: CommonStatusEnum,
// 数据字典
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS)
};
},
created() {
this.getList();
},
methods: {
/** 查询字典类型列表 */
getList() {
this.loading = true;
// 执行查询
listType(this.queryParams).then(response => {
this.typeList = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
name: undefined,
type: undefined,
status: CommonStatusEnum.ENABLE,
remark: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加字典类型";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getType(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改字典类型";
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updateType(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addType(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除字典编号为"' + ids + '"的数据项?').then(function() {
return delType(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
// 执行导出
this.$modal.confirm('是否确认导出所有字典类型数据项?').then(() => {
this.exportLoading = true;
return exportType(params);
}).then(response => {
this.$download.excel(response, '字典类型.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,287 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="80px">
<el-form-item label="医生姓名" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入医生姓名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="科室id" prop="mid">
<el-select v-model="queryParams.mid" placeholder="请选择科室id" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<!-- <el-form-item label="坐诊时间" prop="zztime">
<el-input v-model="queryParams.zztime" placeholder="请输入坐诊时间" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="荣誉称号" prop="label">
<el-input v-model="queryParams.label" placeholder="请输入荣誉称号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:doctor:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:doctor:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="排序ID" align="center" prop="sort" />
<el-table-column label="医生姓名" align="center" prop="name" />
<el-table-column label="医生头像" align="center" :show-overflow-tooltip="true" prop="img" />
<el-table-column label="科室id" align="center" prop="mid" />
<el-table-column label="个人简介" align="center" :show-overflow-tooltip="true" prop="info" />
<el-table-column label="个人擅长" align="center" :show-overflow-tooltip="true" prop="grsc" />
<el-table-column label="坐诊时间" align="center" prop="zztime" />
<el-table-column label="荣誉称号" align="center" prop="label" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:doctor:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:doctor:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="排序ID" prop="sort">
<el-input v-model="form.sort" placeholder="请输入排序ID" />
</el-form-item>
<el-form-item label="医生姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入医生姓名" />
</el-form-item>
<el-form-item label="医生头像">
<imageUpload v-model="form.img"/>
</el-form-item>
<el-form-item label="科室id" prop="mid">
<el-select v-model="form.mid" placeholder="请选择科室id">
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="个人简介">
<editor v-model="form.info" :min-height="192"/>
</el-form-item>
<el-form-item label="个人擅长">
<editor v-model="form.grsc" :min-height="192"/>
</el-form-item>
<el-form-item label="坐诊时间" prop="zztime">
<el-input v-model="form.zztime" placeholder="请输入坐诊时间" />
</el-form-item>
<el-form-item label="荣誉称号" prop="label">
<el-input v-model="form.label" placeholder="请输入荣誉称号" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createDoctor, updateDoctor, deleteDoctor, getDoctor, getDoctorPage, exportDoctorExcel } from "@/api/system/doctor";
import { getKsInfoPage } from "@/api/system/ksInfo";
import ImageUpload from '@/components/ImageUpload';
import Editor from '@/components/Editor';
export default {
name: "Doctor",
components: {
ImageUpload,
Editor,
},
data() {
return {
typeList: [],
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 医生信息列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
img: null,
mid: null,
info: null,
grsc: null,
zztime: [],
label: null,
sort: null,
createTime: [],
},
queryInfoParams: {
pageNo: 1,
pageSize: 100,
name: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
this.getInfoList();
},
methods: {
/** 查询列表 */
getInfoList() {
// 执行查询
getKsInfoPage(this.queryInfoParams).then(response => {
this.typeList = response.data.list;
});
},
getList() {
this.loading = true;
// 执行查询
getDoctorPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
name: undefined,
img: undefined,
mid: undefined,
info: undefined,
grsc: undefined,
zztime: undefined,
label: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加医生信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getDoctor(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改医生信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateDoctor(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createDoctor(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除医生信息编号为"' + id + '"的数据项?').then(function() {
return deleteDoctor(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有医生信息数据项?').then(() => {
this.exportLoading = true;
return exportDoctorExcel(params);
}).then(response => {
this.$download.excel(response, '医生信息.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,391 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="问题" prop="question">
<el-input v-model="queryParams.question" placeholder="请输入问题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="科室名称" prop="departmentName">
<el-input v-model="queryParams.departmentName" placeholder="请输入科室名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="科室id" prop="departmentNo">
<el-input v-model="queryParams.departmentNo" placeholder="请输入科室id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="身体部位标识" prop="bodyAreaType">
<el-select v-model="queryParams.bodyAreaType" placeholder="请选择身体部位标识" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item> -->
<el-form-item label="身体部位名称" prop="bodyArerName">
<el-input v-model="queryParams.bodyArerName" placeholder="请输入身体部位名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="问题类型" prop="questionType">
<el-select v-model="queryParams.questionType" placeholder="请选择问题类型" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item> -->
<!-- <el-form-item label="问题类型名称" prop="questionTypeName">
<el-input v-model="queryParams.questionTypeName" placeholder="请输入问题类型名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:dz-question:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:dz-question:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="id" align="center" prop="id" />
<el-table-column label="问题" align="center" prop="question" />
<el-table-column label="科室名称" align="center" prop="departmentName" />
<el-table-column label="科室id" align="center" prop="departmentNo" />
<el-table-column label="身体部位标识" align="center" prop="bodyAreaType" />
<el-table-column label="身体部位名称" align="center" prop="bodyArerName" />
<el-table-column label="问题类型" align="center" prop="questionType" />
<!-- <el-table-column label="问题类型名称" align="center" prop="questionTypeName" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:dz-question:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:dz-question:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<!-- <el-form-item label="科室名称" prop="departmentName">
<el-input v-model="form.departmentName" placeholder="请输入科室名称" />
</el-form-item>
<el-form-item label="科室id" prop="departmentNo">
<el-input v-model="form.departmentNo" placeholder="请输入科室id" />
</el-form-item> -->
<el-form-item label="科室分类" prop="departmentName">
<el-select v-model="departmentName" placeholder="请选择科室分类" @change="selectKs">
<el-option
v-for="item in toplist"
:key="item.departcode"
:label="item.name"
:value="item.departcode + '+' + item.name">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.departcode }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="部位分类" prop="bodyArerName">
<el-select v-model="bodyArerName" placeholder="请选择部位分类" @change="selectOne">
<el-option
v-for="item in typelist"
:key="item.bodyAreaType"
:label="item.bodyAreaName"
:value="item.bodyAreaType + '+' + item.bodyAreaName">
<span style="float: left">{{ item.bodyAreaName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.bodyAreaType }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="问题类型" prop="questionTypeName">
<el-select v-model="questionTypeName" placeholder="请选择问题类型" @change="selectSType">
<el-option
v-for="item in arealist"
:key="item.questionType"
:label="item.questionTypeName"
:value="item.questionType + '+' + item.questionTypeName">
<span style="float: left">{{ item.questionTypeName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.questionType }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="问题" prop="question">
<el-input v-model="form.question" placeholder="请输入问题" />
</el-form-item>
<!-- <el-form-item label="问题类型名称" prop="questionTypeName">
<el-input v-model="form.questionTypeName" placeholder="请输入问题类型名称" />
</el-form-item> -->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createDzQuestion, updateDzQuestion, deleteDzQuestion, getDzQuestion, getDzQuestionPage, exportDzQuestionExcel } from "@/api/system/dzQuestion";
// import { getKsTypePage} from "@/api/system/ksType";
import { getKsInfoDz} from "@/api/system/ksInfo";
import { getDzTypePageGroup,getDzTypeGroup } from "@/api/system/dzType";
export default {
name: "DzQuestion",
components: {
},
data() {
return {
departmentName: null,
bodyArerName: null,
questionTypeName:null,
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
areatotal: 0,
// 科室信息列表
arealist: [],
// 总条数
toptotal: 0,
// 科室信息列表
toplist: [],
typetotal: 0,
typelist: [],
// 总条数
total: 0,
// 导诊管理列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryTopParams: {
pageNo: 1,
pageSize: 50
},
queryParams: {
pageNo: 1,
pageSize: 10,
question: null,
departmentName: null,
departmentNo: null,
bodyAreaType: null,
bodyArerName: null,
questionType: null,
questionTypeName: null,
createTime: [],
},
queryTypeParams: {
pageNo: 1,
pageSize: 50,
bodyAreaType: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
departmentName: [{ required: true, message: "科室分类不能为空", trigger: "blur" }],
bodyArerName: [{ required: true, message: "部位分类不能为空", trigger: "blur" }],
questionTypeName: [{ required: true, message: "问题分类不能为空", trigger: "blur" }],
question: [{ required: true, message: "问题不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
this.getTopList();
this.getTypeList();
},
methods: {
selectSType(value){
this.form.questionType = value.split("+")[0];
this.form.questionTypeName = value.split("+")[1];
this.questionTypeName = value.split("+")[1];
},
selectOne(value) { //change 触发事件
this.form.bodyAreaType = value.split("+")[0];
this.form.bodyArerName = value.split("+")[1];
this.bodyAreaName1 = value.split("+")[1];
this.queryTypeParams.bodyAreaType = value.split("+")[0];
this.getAreaGroup();
this.questionTypeName = "";
this.form.questionTypeName = "";
},
selectKs(value) { //change 触发事件
this.form.departmentNo = value.split("+")[0];
this.form.departmentName = value.split("+")[1];
this.departmentName = value.split("+")[1];
},
getAreaGroup() {
// 执行查询
getDzTypeGroup(this.queryTypeParams).then(response => {
this.arealist = response.data.list;
this.areatotal = response.data.total;
});
},
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getDzQuestionPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 查询列表 */
getTopList() {
// 执行查询
getKsInfoDz(this.queryTopParams).then(response => {
this.toplist = response.data.list;
this.toptotal = response.data.total;
});
},
getTypeList() {
// 执行查询
getDzTypePageGroup(this.queryTypeParams).then(response => {
this.typelist = response.data.list;
this.typetotal = response.data.total;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
question: undefined,
departmentName: undefined,
departmentNo: undefined,
bodyAreaType: undefined,
bodyArerName: undefined,
questionType: undefined,
questionTypeName: undefined,
};
this.resetForm("form");
this.departmentName = null;
this.bodyArerName = null;
this.questionTypeName = null;
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加导诊管理";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
this.departmentName = row.departmentName;
this.bodyArerName = row.bodyArerName;
this.questionTypeName = row.questionTypeName;
this.queryTypeParams.bodyAreaType = row.bodyAreaType;
this.getAreaGroup();
getDzQuestion(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改导诊管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateDzQuestion(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createDzQuestion(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除导诊管理编号为"' + id + '"的数据项?').then(function() {
return deleteDzQuestion(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有导诊管理数据项?').then(() => {
this.exportLoading = true;
return exportDzQuestionExcel(params);
}).then(response => {
this.$download.excel(response, '导诊管理.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,284 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<!-- <el-form-item label="身体部位标识" prop="bodyAreaType">
<el-select v-model="queryParams.bodyAreaType" placeholder="请选择身体部位标识" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item> -->
<el-form-item label="身体部位名称" prop="bodyAreaName">
<el-input v-model="queryParams.bodyAreaName" placeholder="请输入身体部位名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="问题类型" prop="questionType">
<el-select v-model="queryParams.questionType" placeholder="请选择问题类型" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item> -->
<!-- <el-form-item label="问题类型名称" prop="questionTypeName">
<el-input v-model="queryParams.questionTypeName" placeholder="请输入问题类型名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:dz-type:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:dz-type:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="身体部位标识" align="center" prop="bodyAreaType" />
<el-table-column label="身体部位名称" align="center" prop="bodyAreaName" />
<el-table-column label="问题类型" align="center" prop="questionType" />
<el-table-column label="问题类型名称" align="center" prop="questionTypeName" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:dz-type:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:dz-type:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<!-- <el-form-item label="身体部位标识" prop="bodyAreaType">
<el-select v-model="form.bodyAreaType" placeholder="请选择身体部位标识">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="身体部位名称" prop="bodyAreaName">
<el-input v-model="form.bodyAreaName" placeholder="请输入身体部位名称" />
</el-form-item> -->
<el-form-item label="部位分类" prop="tid">
<el-select v-model="bodyAreaName" placeholder="请选择部位分类" @change="selectOne" >
<!-- <el-option label="请选择字典生成" value="" /> -->
<el-option
v-for="item in toplist"
:key="item.bodyAreaType"
:label="item.bodyAreaName"
:value="item.bodyAreaType + '+' + item.bodyAreaName">
<span style="float: left">{{ item.bodyAreaName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.bodyAreaType }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="问题类型" prop="questionType">
<!-- <el-select v-model="form.questionType" placeholder="请选择问题类型">
<el-option label="请选择字典生成" value="" />
</el-select> -->
<el-select v-model="form.questionType" placeholder="请选择问题类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.DZ_TYPE_NUM)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="问题类型名称" prop="questionTypeName">
<el-input v-model="form.questionTypeName" placeholder="请输入问题类型名称" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createDzType, updateDzType, deleteDzType, getDzType, getDzTypePage,getDzTypePageGroup, exportDzTypeExcel } from "@/api/system/dzType";
export default {
name: "DzType",
components: {
},
data() {
return {
bodyAreaName: null,
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
toptotal: 0,
// 科室信息列表
toplist: [],
// 总条数
total: 0,
// 导诊类型列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
bodyAreaType: null,
bodyAreaName: null,
questionType: null,
questionTypeName: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
this.getTopList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getDzTypePage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
getTopList() {
this.loading = true;
// 执行查询
getDzTypePageGroup(this.queryParams).then(response => {
this.toplist = response.data.list;
this.toptotal = response.data.total;
this.loading = false;
});
},
selectOne(value) { //change 触发事件
this.form.bodyAreaType = value.split("+")[0];
this.form.bodyAreaName = value.split("+")[1];
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
bodyAreaType: undefined,
bodyAreaName: undefined,
questionType: undefined,
questionTypeName: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加导诊类型";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
this.bodyAreaName = row.bodyAreaName;
getDzType(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改导诊类型";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateDzType(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createDzType(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除导诊类型编号为"' + id + '"的数据项?').then(function() {
return deleteDzType(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有导诊类型数据项?').then(() => {
this.exportLoading = true;
return exportDzTypeExcel(params);
}).then(response => {
this.$download.excel(response, '导诊类型.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,247 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="错误码类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择错误码类型" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_ERROR_CODE_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="应用名" prop="applicationName">
<el-input v-model="queryParams.applicationName" placeholder="请输入应用名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="错误码编码" prop="code">
<el-input v-model="queryParams.code" placeholder="请输入错误码编码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="错误码提示" prop="message">
<el-input v-model="queryParams.message" placeholder="请输入错误码提示" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:error-code:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:error-code:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="类型" align="center" prop="type" width="80">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_ERROR_CODE_TYPE" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="应用名" align="center" prop="applicationName" width="200" />
<el-table-column label="错误码编码" align="center" prop="code" width="120" />
<el-table-column label="错误码提示" align="center" prop="message" width="300" />
<el-table-column label="备注" align="center" prop="memo" width="200" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:error-code:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:error-code:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="应用名" prop="applicationName">
<el-input v-model="form.applicationName" placeholder="请输入应用名" />
</el-form-item>
<el-form-item label="错误码编码" prop="code">
<el-input v-model="form.code" placeholder="请输入错误码编码" />
</el-form-item>
<el-form-item label="错误码提示" prop="message">
<el-input v-model="form.message" placeholder="请输入错误码提示" />
</el-form-item>
<el-form-item label="备注" prop="memo">
<el-input v-model="form.memo" placeholder="请输入备注" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createErrorCode, updateErrorCode, deleteErrorCode, getErrorCode, getErrorCodePage, exportErrorCodeExcel } from "@/api/system/errorCode";
export default {
name: "ErrorCode",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 错误码列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
type: null,
applicationName: null,
code: null,
message: null,
createTime: []
},
// 表单参数
form: {},
// 表单校验
rules: {
applicationName: [{ required: true, message: "应用名不能为空", trigger: "blur" }],
code: [{ required: true, message: "错误码编码不能为空", trigger: "blur" }],
message: [{ required: true, message: "错误码提示不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getErrorCodePage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
applicationName: undefined,
code: undefined,
message: undefined,
memo: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加错误码";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getErrorCode(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改错误码";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateErrorCode(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createErrorCode(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除错误码编号为"' + id + '"的数据项?').then(function() {
return deleteErrorCode(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
// 执行导出
this.$modal.confirm('是否确认导出所有错误码数据项?').then(() => {
this.exportLoading = true;
return exportErrorCodeExcel(params);
}).then(response => {
this.$download.excel(response, '错误码.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,257 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="80px">
<el-form-item label="医院名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入医院名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="标签" prop="label">
<el-input v-model="queryParams.label" placeholder="请输入标签" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="联系电话" prop="tel">
<el-input v-model="queryParams.tel" placeholder="请输入联系电话" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="地址" prop="address">
<el-input v-model="queryParams.address" placeholder="请输入地址" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:hospital:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:hospital:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="医院名称" align="center" prop="name" />
<el-table-column label="logo" align="center" :show-overflow-tooltip="true" prop="logo" />
<el-table-column label="标签" align="center" prop="label" />
<el-table-column label="联系电话" align="center" prop="tel" />
<el-table-column label="地址" align="center" prop="address" />
<el-table-column label="描述" align="center" :show-overflow-tooltip="true" prop="content" />
<el-table-column label="封面图" align="center" :show-overflow-tooltip="true" prop="img" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:hospital:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:hospital:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="医院名称" prop="name">
<el-input v-model="form.name" placeholder="请输入医院名称" />
</el-form-item>
<el-form-item label="logo">
<imageUpload v-model="form.logo"/>
</el-form-item>
<el-form-item label="标签" prop="label">
<el-input v-model="form.label" placeholder="请输入标签" />
</el-form-item>
<el-form-item label="联系电话" prop="tel">
<el-input v-model="form.tel" placeholder="请输入联系电话" />
</el-form-item>
<el-form-item label="地址" prop="address">
<el-input v-model="form.address" placeholder="请输入地址" />
</el-form-item>
<el-form-item label="描述">
<editor v-model="form.content" :min-height="192"/>
</el-form-item>
<el-form-item label="封面图">
<imageUpload v-model="form.img"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createHospital, updateHospital, deleteHospital, getHospital, getHospitalPage, exportHospitalExcel } from "@/api/system/hospital";
import ImageUpload from '@/components/ImageUpload';
import Editor from '@/components/Editor';
export default {
name: "Hospital",
components: {
ImageUpload,
Editor,
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 医院信息列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
logo: null,
label: null,
tel: null,
address: null,
content: null,
img: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getHospitalPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
name: undefined,
logo: undefined,
label: undefined,
tel: undefined,
address: undefined,
content: undefined,
img: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加医院信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getHospital(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改医院信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateHospital(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createHospital(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除医院信息编号为"' + id + '"的数据项?').then(function() {
return deleteHospital(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有医院信息数据项?').then(() => {
this.exportLoading = true;
return exportHospitalExcel(params);
}).then(response => {
this.$download.excel(response, '医院信息.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,255 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户id" prop="id">
<el-input v-model="queryParams.id" placeholder="请输入用户id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="用户openid" prop="openid" :label-width="'90px'">
<el-input v-model="queryParams.openid" placeholder="请输入用户openid" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="用户名" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入用户名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="queryParams.remark" placeholder="请输入备注" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="ctime">
<el-date-picker v-model="queryParams.ctime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="用户权限" prop="role">
<el-select v-model="queryParams.role" placeholder="请选择用户权限" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.USER_INFO_ROLE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:info:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:info:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="用户id" align="center" prop="id" />
<el-table-column label="用户openid" align="center" prop="openid" />
<el-table-column label="用户名" align="center" prop="name" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建时间" align="center" prop="ctime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.ctime) }}</span>
</template>
</el-table-column>
<el-table-column label="用户权限" align="center" prop="role">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.USER_INFO_ROLE" :value="scope.row.role" />
</template>
</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:info:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:info:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="用户权限" prop="role">
<el-select v-model="form.role" placeholder="请选择用户权限">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.USER_INFO_ROLE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createInfo, updateInfo, deleteInfo, getInfo, getInfoPage, exportInfoExcel } from "@/api/system/info";
import { DICT_TYPE } from "@/utils/dict";
import DictTag from "@/components/DictTag";
export default {
name: "Info",
components: {
DictTag
},
data() {
return {
DICT_TYPE,
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 用户信息列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
id: null,
openid: null,
name: null,
remark: null,
ctime: [],
role: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
role: [{ required: true, message: "用户权限不能为空", trigger: "change" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getInfoPage(this.queryParams).then(response => {
console.log(response.data.list);
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
remark: undefined,
role: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加用户信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getInfo(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改用户信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateInfo(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createInfo(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除用户信息编号为"' + id + '"的数据项?').then(function() {
return deleteInfo(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有用户信息数据项?').then(() => {
this.exportLoading = true;
return exportInfoExcel(params);
}).then(response => {
this.$download.excel(response, '用户信息.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>
<style scoped>
/* 确保用户openid表单项的label宽度为90px */
:deep(.openid-form-item .el-form-item__label) {
width: 90px !important;
}
</style>

View File

@@ -0,0 +1,302 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入科室名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="科室分类" prop="tid">
<el-select v-model="queryParams.tid" placeholder="请选择科室分类" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item> -->
<el-form-item label="科室编码" prop="departcode">
<el-input v-model="queryParams.departcode" placeholder="请输入科室编码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="科室类别" prop="departtype">
<el-input v-model="queryParams.departtype" placeholder="请输入科室类别" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:ks-info:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:ks-info:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="科室名称" align="center" prop="name" />
<el-table-column label="科室分类" align="center" prop="tid" />
<el-table-column label="详细介绍" align="center" :show-overflow-tooltip="true" prop="info" />
<el-table-column label="分布位置" align="center" :show-overflow-tooltip="true" prop="address" />
<el-table-column label="封面图" align="center" :show-overflow-tooltip="true" prop="img" />
<el-table-column label="科室编码" align="center" prop="departcode" />
<el-table-column label="科室类别" align="center" prop="departtype" />
<el-table-column label="更新类别" align="center" prop="uptype" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:ks-info:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:ks-info:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="650px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="科室名称" prop="name">
<el-input v-model="form.name" placeholder="请输入科室名称" />
</el-form-item>
<el-form-item label="科室分类" prop="tid">
<el-select v-model="form.tid" placeholder="请选择科室分类">
<!-- <el-option label="请选择字典生成" value="" /> -->
<el-option
v-for="item in toplist"
:key="item.id"
:label="item.name"
:value="item.id">
<span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.id }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="详细介绍">
<editor v-model="form.info" :min-height="192"/>
</el-form-item>
<el-form-item label="分布位置">
<editor v-model="form.address" :min-height="192"/>
</el-form-item>
<el-form-item label="封面图">
<imageUpload v-model="form.img"/>
</el-form-item>
<el-form-item label="科室编码" prop="departcode">
<el-input v-model="form.departcode" placeholder="请输入科室编码" />
</el-form-item>
<el-form-item label="科室类别" prop="departtype">
<el-input v-model="form.departtype" placeholder="请输入科室类别" />
</el-form-item>
<el-form-item label="更新类别" prop="uptype">
<el-input v-model="form.uptype" placeholder="请输入更新类别" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createKsInfo, updateKsInfo, deleteKsInfo, getKsInfo, getKsInfoPage, exportKsInfoExcel } from "@/api/system/ksInfo";
import { getKsTypePage} from "@/api/system/ksType";
import ImageUpload from '@/components/ImageUpload';
import Editor from '@/components/Editor';
export default {
name: "KsInfo",
components: {
ImageUpload,
Editor,
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
toptotal: 0,
// 科室信息列表
toplist: [],
// 总条数
total: 0,
// 科室信息列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
tid: null,
info: null,
address: null,
img: null,
departcode: null,
departtype: null,
uptype: null,
createTime: [],
},
queryTopParams: {
pageNo: 1,
pageSize: 100,
name: null,
tid: null,
info: null,
address: null,
img: null,
departcode: null,
departtype: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
this.getTopList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getKsInfoPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 查询列表 */
getTopList() {
// 执行查询
getKsTypePage(this.queryTopParams).then(response => {
this.toplist = response.data.list;
this.toptotal = response.data.total;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
name: undefined,
tid: undefined,
info: undefined,
address: undefined,
img: undefined,
departcode: undefined,
departtype: undefined,
uptype: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加科室信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getKsInfo(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改科室信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateKsInfo(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createKsInfo(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除科室信息编号为"' + id + '"的数据项?').then(function() {
return deleteKsInfo(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有科室信息数据项?').then(() => {
this.exportLoading = true;
return exportKsInfoExcel(params);
}).then(response => {
this.$download.excel(response, '科室信息.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,213 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入分类名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:ks-type:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:ks-type:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="排序ID" align="center" prop="sort" />
<el-table-column label="分类名称" align="center" prop="name" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:ks-type:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:ks-type:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="排序ID" prop="sort">
<el-input v-model="form.sort" placeholder="请输入排序ID" />
</el-form-item>
<el-form-item label="分类名称" prop="name">
<el-input v-model="form.name" placeholder="请输入分类名称" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createKsType, updateKsType, deleteKsType, getKsType, getKsTypePage, exportKsTypeExcel } from "@/api/system/ksType";
export default {
name: "KsType",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 科室类别列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
sort: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getKsTypePage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
name: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加科室类别";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getKsType(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改科室类别";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateKsType(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createKsType(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除科室类别编号为"' + id + '"的数据项?').then(function() {
return deleteKsType(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有科室类别数据项?').then(() => {
this.exportLoading = true;
return exportKsTypeExcel(params);
}).then(response => {
this.$download.excel(response, '科室类别.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,281 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入导视名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="楼层id" prop="fid">
<el-input v-model="queryParams.fid" placeholder="请输入楼层id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="大楼id" prop="bid">
<el-input v-model="queryParams.bid" placeholder="请输入大楼id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:label:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:label:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="导视名称" align="center" prop="name" />
<el-table-column label="导视详情" align="center" prop="info" />
<el-table-column label="楼层id" align="center" prop="fid" />
<!-- <el-table-column label="大楼id" align="center" prop="bid" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:label:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:label:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="导视名称" prop="name">
<!-- <el-input v-model="form.fid" placeholder="请输入楼层id" /> -->
<treeselect :value="form.name" :options="buildingOptions" :normalizer="normalizer" :flat="true" placeholder="选择大楼" @select="node => handleSelect(node)" >
<div slot="value-label" slot-scope="{ node }">{{ form.name ? form.name : '' }}</div>
</TreeSelect>
</el-form-item>
<!-- <el-form-item label="导视名称" prop="name">
<el-input v-model="form.name" readonly placeholder="请输入导视名称" />
</el-form-item> -->
<el-form-item label="导视详情">
<editor v-model="form.info" :min-height="192"/>
</el-form-item>
<!-- <el-form-item label="大楼id" prop="bid">
<el-input v-model="form.bid" placeholder="请输入大楼id" />
</el-form-item> -->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createLabel, updateLabel, deleteLabel, getLabel, getLabelPage, exportLabelExcel } from "@/api/system/label";
import { listBuilding, listSimpleBuildings, createBuilding, updateBuilding, deleteBuilding, getBuilding, getBuildingPage, exportBuildingExcel } from "@/api/system/building";
import Editor from '@/components/Editor';
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "Label",
components: {
Editor,Treeselect
},
data() {
return {
// 遮罩层
ww: null,
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 信息列表
list: [],
// 部门树选项
buildingOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
info: null,
fid: null,
bid: null,
createTime: [],
},
queryBuildParams: {
pageNo: 1,
pageSize: 100,
name: null,
info: null,
fid: null,
bid: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
this.getBuildTree();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getLabelPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 转换数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.fid,
label: node.name,
isDisabled: node.parentId == 0,
children: node.children
};
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
name: undefined,
info: undefined,
fid: undefined,
bid: undefined,
};
this.resetForm("form");
},
handleSelect(node,instanceId){
//alert(node.name);
// alert(node.id);
// alert(node.parentId);
this.ww = node.name;
this.form.name = node.name;
this.form.bid = node.parentId;
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
getBuildTree(){
getBuildingPage(this.queryBuildParams).then(response => {
this.buildingOptions = this.handleTree(response.data.list, "id");
});
},
handleAdd() {
this.reset();
this.open = true;
this.title = "添加信息";
this.getBuildTree();
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getLabel(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateLabel(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createLabel(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除信息编号为"' + id + '"的数据项?').then(function() {
return deleteLabel(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有信息数据项?').then(() => {
this.exportLoading = true;
return exportLabelExcel(params);
}).then(response => {
this.$download.excel(response, '信息.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,136 @@
<template>
<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="userIp">
<el-input v-model="queryParams.userIp" placeholder="请输入登录地址" clearable style="width: 240px;"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="用户名称" prop="username">
<el-input v-model="queryParams.username" placeholder="请输入用户名称" clearable style="width: 240px;"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="结果" clearable style="width: 240px">
<el-option :key="true" label="成功" :value="true"/>
<el-option :key="false" label="失败" :value="false"/>
</el-select>
</el-form-item>
<el-form-item label="登录时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:login-log:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="list">
<el-table-column label="访问编号" align="center" prop="id" />
<el-table-column label="日志类型" align="center" prop="logType" width="120">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_LOGIN_TYPE" :value="scope.row.logType" />
</template>
</el-table-column>
<el-table-column label="用户名称" align="center" prop="username" />
<el-table-column label="登录地址" align="center" prop="userIp" width="130" :show-overflow-tooltip="true" />
<el-table-column label="userAgent" align="center" prop="userAgent" width="400" :show-overflow-tooltip="true" />
<el-table-column label="结果" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_LOGIN_RESULT" :value="scope.row.result" />
</template>
</el-table-column>
<el-table-column label="登录日期" align="center" prop="loginTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
</div>
</template>
<script>
import { list, exportLoginLog } from "@/api/system/loginlog";
export default {
name: "Logininfor",
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 表格数据
list: [],
// 状态数据字典
statusOptions: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
userIp: undefined,
username: undefined,
status: undefined,
createTime: []
}
};
},
created() {
this.getList();
},
methods: {
/** 查询登录日志列表 */
getList() {
this.loading = true;
list(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
}
);
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 导出按钮操作 */
handleExport() {
this.$modal.confirm('是否确认导出所有操作日志数据项?').then(() => {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.exportLoading = true;
return exportLoginLog(params);
}).then(response => {
this.$download.excel(response, '登录日志.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,390 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="菜单名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入菜单名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="菜单状态" clearable>
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:menu:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">展开/折叠</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-if="refreshTable" v-loading="loading" :data="menuList" row-key="id" :default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column prop="name" label="菜单名称" :show-overflow-tooltip="true" width="250"></el-table-column>
<el-table-column prop="icon" label="图标" align="center" width="100">
<template slot-scope="scope">
<svg-icon :icon-class="scope.row.icon" />
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" width="60"></el-table-column>
<el-table-column prop="permission" label="权限标识" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="status" label="状态" width="80">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:menu:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-plus" @click="handleAdd(scope.row)"
v-hasPermi="['system:menu:create']">新增</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:menu:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改菜单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="680px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row>
<el-col :span="24">
<el-form-item label="上级菜单">
<treeselect v-model="form.parentId" :options="menuOptions" :normalizer="normalizer" :show-count="true"
placeholder="选择上级菜单"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="菜单类型" prop="type">
<el-radio-group v-model="form.type">
<el-radio v-for="dict in menuTypeDictDatas" :key="parseInt(dict.value)" :label="parseInt(dict.value)">
{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item v-if="form.type !== 3" label="菜单图标">
<el-popover placement="bottom-start" width="460" trigger="click" @show="$refs['iconSelect'].reset()">
<IconSelect ref="iconSelect" @selected="selected" />
<el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" readonly>
<svg-icon v-if="form.icon" slot="prefix" :icon-class="form.icon" class="el-input__icon"
style="height: 32px;width: 16px;"/>
<i v-else slot="prefix" class="el-icon-search el-input__icon" />
</el-input>
</el-popover>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="菜单名称" prop="name">
<el-input v-model="form.name" placeholder="请输入菜单名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.type !== 3" label="路由地址" prop="path">
<span slot="label">
<el-tooltip content="访问的路由地址,如:`user`。如需外网地址时,则以 `http(s)://` 开头" placement="top">
<i class="el-icon-question" />
</el-tooltip>
路由地址
</span>
<el-input v-model="form.path" placeholder="请输入路由地址" />
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.type === 2">
<el-form-item label="组件路径" prop="component">
<el-input v-model="form.component" placeholder="请输入组件路径" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.type !== 1" label="权限标识">
<span slot="label">
<el-tooltip content="Controller 方法上的权限字符,如:@PreAuthorize(`@ss.hasPermission('system:user:list')`)" placement="top">
<i class="el-icon-question" />
</el-tooltip>
权限字符
</span>
<el-input v-model="form.permission" placeholder="请权限标识" maxlength="50" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="菜单状态" prop="status">
<span slot="label">
<el-tooltip content="选择停用时,路由将不会出现在侧边栏,也不能被访问" placement="top">
<i class="el-icon-question" />
</el-tooltip>
菜单状态
</span>
<el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.type !== 3" label="显示状态">
<span slot="label">
<el-tooltip content="选择隐藏时,路由将不会出现在侧边栏,但仍然可以访问" placement="top">
<i class="el-icon-question" />
</el-tooltip>
是否显示
</span>
<el-radio-group v-model="form.visible">
<el-radio :key="true" :label="true">显示</el-radio>
<el-radio :key="false" :label="false">隐藏</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.type === 2" label="显示状态">
<span slot="label">
<el-tooltip content="选择缓存时,则会被 `keep-alive` 缓存,需要匹配组件的 `name` 和路由地址保持一致" placement="top">
<i class="el-icon-question" />
</el-tooltip>
是否缓存
</span>
<el-radio-group v-model="form.keepAlive">
<el-radio :key="true" :label="true">缓存</el-radio>
<el-radio :key="false" :label="false">不缓存</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/system/menu";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import IconSelect from "@/components/IconSelect";
import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants'
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
import {isExternal} from "@/utils/validate";
export default {
name: "Menu",
components: { Treeselect, IconSelect },
data() {
return {
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 菜单表格树数据
menuList: [],
// 菜单树选项
menuOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 是否展开,默认全部折叠
isExpandAll: false,
// 重新渲染表格状态
refreshTable: true,
// 查询参数
queryParams: {
name: undefined,
visible: undefined
},
// 表单参数
form: {},
// 表单校验
rules: {
name: [
{ required: true, message: "菜单名称不能为空", trigger: "blur" }
],
sort: [
{ required: true, message: "菜单顺序不能为空", trigger: "blur" }
],
path: [
{ required: true, message: "路由地址不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "状态不能为空", trigger: "blur" }
]
},
// 枚举
MenuTypeEnum: SystemMenuTypeEnum,
CommonStatusEnum: CommonStatusEnum,
// 数据字典
menuTypeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_MENU_TYPE),
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS)
};
},
created() {
this.getList();
},
methods: {
// 选择图标
selected(name) {
this.form.icon = name;
},
/** 查询菜单列表 */
getList() {
this.loading = true;
listMenu(this.queryParams).then(response => {
this.menuList = this.handleTree(response.data, "id");
this.loading = false;
});
},
/** 转换菜单数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children
};
},
/** 查询菜单下拉树结构 */
getTreeselect() {
listMenu().then(response => {
this.menuOptions = [];
const menu = { id: 0, name: '主类目', children: [] };
menu.children = this.handleTree(response.data, "id");
this.menuOptions.push(menu);
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
parentId: 0,
name: undefined,
icon: undefined,
type: SystemMenuTypeEnum.DIR,
sort: undefined,
status: CommonStatusEnum.ENABLE,
visible: true,
keepAlive: true,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
this.getTreeselect();
if (row != null && row.id) {
this.form.parentId = row.id;
} else {
this.form.parentId = 0;
}
this.open = true;
this.title = "添加菜单";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.getTreeselect();
getMenu(row.id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改菜单";
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
// 若权限类型为目录或者菜单时,进行 path 的校验,避免后续拼接出来的路由无法跳转
if (this.form.type === SystemMenuTypeEnum.DIR
|| this.form.type === SystemMenuTypeEnum.MENU) {
// 如果是外链,则不进行校验
const path = this.form.path
if (!isExternal(path)) {
// 父权限为根节点path 必须以 / 开头
if (this.form.parentId === 0 && path.charAt(0) !== '/') {
this.$modal.msgSuccess('前端必须以 / 开头')
return
} else if (this.form.parentId !== 0 && path.charAt(0) === '/') {
this.$modal.msgSuccess('前端不能以 / 开头')
return
}
}
}
// 提交
if (this.form.id !== undefined) {
updateMenu(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addMenu(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').then(function() {
return delMenu(row.id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,670 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="queryParams.userId" placeholder="请输入用户ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="ID" prop="patientid">
<el-input v-model="queryParams.patientid" placeholder="请输入就诊ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开始时间" prop="startDate1">
<el-date-picker v-model="queryParams.startDate" style="width: 240px" value-format="yyyy-MM-dd" type="date"/>
</el-form-item>
<el-form-item label="结束时间" prop="endDate1">
<el-date-picker v-model="queryParams.endDate" style="width: 240px" value-format="yyyy-MM-dd" type="date"/>
</el-form-item>
<!-- <el-form-item label="检查项目名称" prop="creatitemname">
<el-input v-model="queryParams.creatitemname" placeholder="请输入检查项目名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="预约时间" prop="appointmenttime">
<el-date-picker v-model="queryParams.appointmenttime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="创建时间" prop="creatdate">
<el-date-picker v-model="queryParams.creatdate" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="查询方式" prop="querytype">
<el-select v-model="queryParams.querytype" placeholder="请选择查询方式" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="订单ID" prop="orderno">
<el-input v-model="queryParams.orderno" placeholder="请输入订单ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="单据ID" prop="flowno">
<el-input v-model="queryParams.flowno" placeholder="请输入单据ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开单科室编号" prop="setdepartcode">
<el-input v-model="queryParams.setdepartcode" placeholder="请输入开单科室编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开单科室名称" prop="setdepartname">
<el-input v-model="queryParams.setdepartname" placeholder="请输入开单科室名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="执行科室编号" prop="dodepartcode">
<el-input v-model="queryParams.dodepartcode" placeholder="请输入执行科室编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="执行科室名称" prop="dodepartname">
<el-input v-model="queryParams.dodepartname" placeholder="请输入执行科室名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="单据类别" prop="billtype">
<el-select v-model="queryParams.billtype" placeholder="请选择单据类别" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="单据名称" prop="billname">
<el-input v-model="queryParams.billname" placeholder="请输入单据名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="单据描述" prop="billdes">
<el-input v-model="queryParams.billdes" placeholder="请输入单据描述" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开单时间" prop="billtime">
<el-date-picker v-model="queryParams.billtime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="项目总金额" prop="billmoney">
<el-input v-model="queryParams.billmoney" placeholder="请输入项目总金额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医生代码" prop="doctorcode">
<el-input v-model="queryParams.doctorcode" placeholder="请输入医生代码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医生名称" prop="doctorname">
<el-input v-model="queryParams.doctorname" placeholder="请输入医生名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="自费金额" prop="sincemoney">
<el-input v-model="queryParams.sincemoney" placeholder="请输入自费金额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="公费金额" prop="fairmoney">
<el-input v-model="queryParams.fairmoney" placeholder="请输入公费金额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开单流水" prop="serialno">
<el-input v-model="queryParams.serialno" placeholder="请输入开单流水" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="申请单号" prop="appointno">
<el-input v-model="queryParams.appointno" placeholder="请输入申请单号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="就诊流水号" prop="serialflowno">
<el-input v-model="queryParams.serialflowno" placeholder="请输入就诊流水号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="就诊类别" prop="jzlb">
<el-input v-model="queryParams.jzlb" placeholder="请输入就诊类别" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="病种类别代码" prop="bzdm">
<el-input v-model="queryParams.bzdm" placeholder="请输入病种类别代码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="更新时间" prop="updatedate">
<el-date-picker v-model="queryParams.updatedate" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="账单信息" prop="billsmsg">
<el-input v-model="queryParams.billsmsg" placeholder="请输入账单信息" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="支付签名" prop="paynature">
<el-input v-model="queryParams.paynature" placeholder="请输入支付签名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="支付类别" prop="paytype">
<el-select v-model="queryParams.paytype" placeholder="请选择支付类别" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="支付ID" prop="powertranid">
<el-input v-model="queryParams.powertranid" placeholder="请输入支付ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="支付卡号" prop="powertrancard">
<el-input v-model="queryParams.powertrancard" placeholder="请输入支付卡号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="终端ID" prop="terminalid">
<el-input v-model="queryParams.terminalid" placeholder="请输入终端ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="参考号" prop="referno">
<el-input v-model="queryParams.referno" placeholder="请输入参考号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="支付金额" prop="zfamount">
<el-input v-model="queryParams.zfamount" placeholder="请输入支付金额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医保金额" prop="ybzhamount">
<el-input v-model="queryParams.ybzhamount" placeholder="请输入医保金额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医保余额" prop="ybtcamount">
<el-input v-model="queryParams.ybtcamount" placeholder="请输入医保余额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医保信息" prop="yboutmsg">
<el-input v-model="queryParams.yboutmsg" placeholder="请输入医保信息" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="his参考号" prop="hisopernum">
<el-input v-model="queryParams.hisopernum" placeholder="请输入his参考号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="工行ID" prop="icbcorderid">
<el-input v-model="queryParams.icbcorderid" placeholder="请输入工行ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="工行支付时间" prop="icbcpaytime">
<el-date-picker v-model="queryParams.icbcpaytime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="标志" prop="appFlag">
<el-input v-model="queryParams.appFlag" placeholder="请输入标志" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开单状态" prop="appStatus">
<el-select v-model="queryParams.appStatus" placeholder="请选择开单状态" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="提交时间" prop="ctime">
<el-date-picker v-model="queryParams.ctime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="修改时间" prop="utime">
<el-date-picker v-model="queryParams.utime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:mzjf:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:mzjf:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> -->
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="用户ID" align="center" prop="userId" />
<el-table-column label="就诊卡id" align="center" prop="cardId" />
<el-table-column label="ID" align="center" prop="patientid" />
<el-table-column label="证件类型" align="center" prop="idtype" />
<el-table-column label="操作类型" align="center" prop="locktype" />
<el-table-column label="检查项目名称" align="center" prop="creatitemname" />
<el-table-column label="预约时间" align="center" prop="appointmenttime" />
<el-table-column label="创建时间" align="center" prop="creatdate" />
<el-table-column label="查询方式" align="center" prop="querytype" />
<el-table-column label="订单ID" align="center" prop="orderno" />
<el-table-column label="单据ID" align="center" prop="flowno" />
<el-table-column label="开单科室编号" align="center" prop="setdepartcode" />
<el-table-column label="开单科室名称" align="center" prop="setdepartname" />
<el-table-column label="执行科室编号" align="center" prop="dodepartcode" />
<el-table-column label="执行科室名称" align="center" prop="dodepartname" />
<el-table-column label="单据类别" align="center" prop="billtype" />
<el-table-column label="单据名称" align="center" prop="billname" />
<el-table-column label="单据描述" align="center" prop="billdes" />
<el-table-column label="开单时间" align="center" prop="billtime" />
<el-table-column label="项目总金额" align="center" prop="billmoney" />
<el-table-column label="医生代码" align="center" prop="doctorcode" />
<el-table-column label="医生名称" align="center" prop="doctorname" />
<el-table-column label="自费金额" align="center" prop="sincemoney" />
<el-table-column label="公费金额" align="center" prop="fairmoney" />
<el-table-column label="开单流水" align="center" prop="serialno" />
<el-table-column label="申请单号" align="center" prop="appointno" />
<el-table-column label="就诊流水号" align="center" prop="serialflowno" />
<el-table-column label="就诊类别" align="center" prop="jzlb" />
<el-table-column label="病种类别代码" align="center" prop="bzdm" />
<el-table-column label="更新时间" align="center" prop="updatedate" />
<el-table-column label="账单信息" align="center" prop="billsmsg" />
<el-table-column label="支付签名" align="center" prop="paynature" />
<el-table-column label="支付类别" align="center" prop="paytype" />
<el-table-column label="支付ID" align="center" prop="powertranid" />
<el-table-column label="支付卡号" align="center" prop="powertrancard" />
<el-table-column label="终端ID" align="center" prop="terminalid" />
<el-table-column label="参考号" align="center" prop="referno" />
<el-table-column label="支付金额" align="center" prop="zfamount" />
<el-table-column label="医保金额" align="center" prop="ybzhamount" />
<el-table-column label="医保余额" align="center" prop="ybtcamount" />
<el-table-column label="医保信息" align="center" prop="yboutmsg" />
<el-table-column label="his参考号" align="center" prop="hisopernum" />
<el-table-column label="工行ID" align="center" prop="icbcorderid" />
<el-table-column label="工行支付时间" align="center" prop="icbcpaytime" />
<el-table-column label="标志" align="center" prop="appFlag" />
<el-table-column label="开单状态" align="center" prop="appStatus" />
<el-table-column label="提交时间" align="center" prop="ctime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.ctime) }}</span>
</template>
</el-table-column>
<el-table-column label="修改时间" align="center" prop="utime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.utime) }}</span>
</template>
</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:mzjf:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:mzjf:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户ID" />
</el-form-item>
<el-form-item label="就诊卡id" prop="cardId">
<el-input v-model="form.cardId" placeholder="请输入就诊卡id" />
</el-form-item>
<el-form-item label="ID" prop="patientid">
<el-input v-model="form.patientid" placeholder="请输入ID" />
</el-form-item>
<el-form-item label="证件类型" prop="idtype">
<el-select v-model="form.idtype" placeholder="请选择证件类型">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="操作类型" prop="locktype">
<el-select v-model="form.locktype" placeholder="请选择操作类型">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="检查项目名称" prop="creatitemname">
<el-input v-model="form.creatitemname" placeholder="请输入检查项目名称" />
</el-form-item>
<el-form-item label="预约时间" prop="appointmenttime">
<el-date-picker clearable v-model="form.appointmenttime" type="date" value-format="timestamp" placeholder="选择预约时间" />
</el-form-item>
<el-form-item label="创建时间" prop="creatdate">
<el-date-picker clearable v-model="form.creatdate" type="date" value-format="timestamp" placeholder="选择创建时间" />
</el-form-item>
<el-form-item label="查询方式" prop="querytype">
<el-select v-model="form.querytype" placeholder="请选择查询方式">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="订单ID" prop="orderno">
<el-input v-model="form.orderno" placeholder="请输入订单ID" />
</el-form-item>
<el-form-item label="单据ID" prop="flowno">
<el-input v-model="form.flowno" placeholder="请输入单据ID" />
</el-form-item>
<el-form-item label="开单科室编号" prop="setdepartcode">
<el-input v-model="form.setdepartcode" placeholder="请输入开单科室编号" />
</el-form-item>
<el-form-item label="开单科室名称" prop="setdepartname">
<el-input v-model="form.setdepartname" placeholder="请输入开单科室名称" />
</el-form-item>
<el-form-item label="执行科室编号" prop="dodepartcode">
<el-input v-model="form.dodepartcode" placeholder="请输入执行科室编号" />
</el-form-item>
<el-form-item label="执行科室名称" prop="dodepartname">
<el-input v-model="form.dodepartname" placeholder="请输入执行科室名称" />
</el-form-item>
<el-form-item label="单据类别" prop="billtype">
<el-select v-model="form.billtype" placeholder="请选择单据类别">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="单据名称" prop="billname">
<el-input v-model="form.billname" placeholder="请输入单据名称" />
</el-form-item>
<el-form-item label="单据描述" prop="billdes">
<el-input v-model="form.billdes" placeholder="请输入单据描述" />
</el-form-item>
<el-form-item label="开单时间" prop="billtime">
<el-date-picker clearable v-model="form.billtime" type="date" value-format="timestamp" placeholder="选择开单时间" />
</el-form-item>
<el-form-item label="项目总金额" prop="billmoney">
<el-input v-model="form.billmoney" placeholder="请输入项目总金额" />
</el-form-item>
<el-form-item label="医生代码" prop="doctorcode">
<el-input v-model="form.doctorcode" placeholder="请输入医生代码" />
</el-form-item>
<el-form-item label="医生名称" prop="doctorname">
<el-input v-model="form.doctorname" placeholder="请输入医生名称" />
</el-form-item>
<el-form-item label="自费金额" prop="sincemoney">
<el-input v-model="form.sincemoney" placeholder="请输入自费金额" />
</el-form-item>
<el-form-item label="公费金额" prop="fairmoney">
<el-input v-model="form.fairmoney" placeholder="请输入公费金额" />
</el-form-item>
<el-form-item label="开单流水" prop="serialno">
<el-input v-model="form.serialno" placeholder="请输入开单流水" />
</el-form-item>
<el-form-item label="申请单号" prop="appointno">
<el-input v-model="form.appointno" placeholder="请输入申请单号" />
</el-form-item>
<el-form-item label="就诊流水号" prop="serialflowno">
<el-input v-model="form.serialflowno" placeholder="请输入就诊流水号" />
</el-form-item>
<el-form-item label="就诊类别" prop="jzlb">
<el-input v-model="form.jzlb" placeholder="请输入就诊类别" />
</el-form-item>
<el-form-item label="病种类别代码" prop="bzdm">
<el-input v-model="form.bzdm" placeholder="请输入病种类别代码" />
</el-form-item>
<el-form-item label="更新时间" prop="updatedate">
<el-date-picker clearable v-model="form.updatedate" type="date" value-format="timestamp" placeholder="选择更新时间" />
</el-form-item>
<el-form-item label="账单信息" prop="billsmsg">
<el-input v-model="form.billsmsg" placeholder="请输入账单信息" />
</el-form-item>
<el-form-item label="支付签名" prop="paynature">
<el-input v-model="form.paynature" placeholder="请输入支付签名" />
</el-form-item>
<el-form-item label="支付类别" prop="paytype">
<el-select v-model="form.paytype" placeholder="请选择支付类别">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="支付ID" prop="powertranid">
<el-input v-model="form.powertranid" placeholder="请输入支付ID" />
</el-form-item>
<el-form-item label="支付卡号" prop="powertrancard">
<el-input v-model="form.powertrancard" placeholder="请输入支付卡号" />
</el-form-item>
<el-form-item label="终端ID" prop="terminalid">
<el-input v-model="form.terminalid" placeholder="请输入终端ID" />
</el-form-item>
<el-form-item label="参考号" prop="referno">
<el-input v-model="form.referno" placeholder="请输入参考号" />
</el-form-item>
<el-form-item label="支付金额" prop="zfamount">
<el-input v-model="form.zfamount" placeholder="请输入支付金额" />
</el-form-item>
<el-form-item label="医保金额" prop="ybzhamount">
<el-input v-model="form.ybzhamount" placeholder="请输入医保金额" />
</el-form-item>
<el-form-item label="医保余额" prop="ybtcamount">
<el-input v-model="form.ybtcamount" placeholder="请输入医保余额" />
</el-form-item>
<el-form-item label="医保信息" prop="yboutmsg">
<el-input v-model="form.yboutmsg" placeholder="请输入医保信息" />
</el-form-item>
<el-form-item label="his参考号" prop="hisopernum">
<el-input v-model="form.hisopernum" placeholder="请输入his参考号" />
</el-form-item>
<el-form-item label="工行ID" prop="icbcorderid">
<el-input v-model="form.icbcorderid" placeholder="请输入工行ID" />
</el-form-item>
<el-form-item label="工行支付时间" prop="icbcpaytime">
<el-date-picker clearable v-model="form.icbcpaytime" type="date" value-format="timestamp" placeholder="选择工行支付时间" />
</el-form-item>
<el-form-item label="标志" prop="appFlag">
<el-input v-model="form.appFlag" placeholder="请输入标志" />
</el-form-item>
<el-form-item label="开单状态" prop="appStatus">
<el-radio-group v-model="form.appStatus">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="提交时间" prop="ctime">
<el-date-picker clearable v-model="form.ctime" type="date" value-format="timestamp" placeholder="选择提交时间" />
</el-form-item>
<el-form-item label="修改时间" prop="utime">
<el-date-picker clearable v-model="form.utime" type="date" value-format="timestamp" placeholder="选择修改时间" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createMzjf, updateMzjf, deleteMzjf, getMzjf, getMzjfPage, exportMzjfExcel } from "@/api/system/mzjf";
export default {
name: "Mzjf",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 门诊缴费列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
userId: null,
patientid: null,
// idtype: null,
// locktype: null,
// creatitemname: null,
// appointmenttime: [],
// creatdate: [],
// querytype: null,
// orderno: null,
// flowno: null,
// setdepartcode: null,
// setdepartname: null,
// dodepartcode: null,
// dodepartname: null,
// billtype: null,
// billname: null,
// billdes: null,
// billtime: [],
// billmoney: null,
// doctorcode: null,
// doctorname: null,
// sincemoney: null,
// fairmoney: null,
// serialno: null,
// appointno: null,
// serialflowno: null,
// jzlb: null,
// bzdm: null,
// updatedate: [],
// billsmsg: null,
// paynature: null,
// paytype: null,
// powertranid: null,
// powertrancard: null,
// terminalid: null,
// referno: null,
// zfamount: null,
// ybzhamount: null,
// ybtcamount: null,
// yboutmsg: null,
// hisopernum: null,
// icbcorderid: null,
// icbcpaytime: [],
// appFlag: null,
// appStatus: null,
// ctime: [],
// utime: [],
startDate: null,
endDate: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
const end = new Date();//获取当前的日期
this.queryParams.startDate=this.dateFormat(end);
this.queryParams.endDate=this.dateFormat(end);
this.getList();
},
methods: {
dateFormat(dateData) {
var date = new Date(dateData)
var y = date.getFullYear()
var m = date.getMonth() + 1
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
const time = y + '-' + m + '-' + d;
return time;
},
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getMzjfPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
userId: undefined,
cardId: undefined,
patientid: undefined,
idtype: undefined,
locktype: undefined,
creatitemname: undefined,
appointmenttime: undefined,
creatdate: undefined,
querytype: undefined,
orderno: undefined,
flowno: undefined,
setdepartcode: undefined,
setdepartname: undefined,
dodepartcode: undefined,
dodepartname: undefined,
billtype: undefined,
billname: undefined,
billdes: undefined,
billtime: undefined,
billmoney: undefined,
doctorcode: undefined,
doctorname: undefined,
sincemoney: undefined,
fairmoney: undefined,
serialno: undefined,
appointno: undefined,
serialflowno: undefined,
jzlb: undefined,
bzdm: undefined,
updatedate: undefined,
billsmsg: undefined,
paynature: undefined,
paytype: undefined,
powertranid: undefined,
powertrancard: undefined,
terminalid: undefined,
referno: undefined,
zfamount: undefined,
ybzhamount: undefined,
ybtcamount: undefined,
yboutmsg: undefined,
hisopernum: undefined,
icbcorderid: undefined,
icbcpaytime: undefined,
appFlag: undefined,
appStatus: undefined,
ctime: undefined,
utime: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加门诊缴费";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getMzjf(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改门诊缴费";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateMzjf(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createMzjf(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除门诊缴费编号为"' + id + '"的数据项?').then(function() {
return deleteMzjf(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有门诊缴费数据项?').then(() => {
this.exportLoading = true;
return exportMzjfExcel(params);
}).then(response => {
this.$download.excel(response, '门诊缴费.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,309 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="queryParams.userId" placeholder="请输入用户ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="就诊ID" prop="patientid">
<el-input v-model="queryParams.patientid" placeholder="请输入就诊ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开始时间" prop="startDate">
<el-date-picker v-model="queryParams.startDate" style="width: 240px" value-format="yyyy-MM-dd" type="date"/>
</el-form-item>
<el-form-item label="结束时间" prop="endDate">
<el-date-picker v-model="queryParams.endDate" style="width: 240px" value-format="yyyy-MM-dd" type="date"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="用户ID" align="center" prop="userId" />
<el-table-column label="就诊ID" align="center" width="100px" prop="patientid" />
<el-table-column label="订单ID" align="center" width="100px" :show-overflow-tooltip="true" prop="orderno" />
<el-table-column label="单据ID" align="center" prop="flowno" />
<el-table-column label="开单科室编号" align="center" width="100px" prop="setdepartcode" />
<el-table-column label="开单科室名称" align="center" width="100px" :show-overflow-tooltip="true" prop="setdepartname" />
<el-table-column label="开单时间" align="center" :show-overflow-tooltip="true" prop="billtime" />
<el-table-column label="项目总金额" align="center" width="100px" prop="billmoney" />
<el-table-column label="医生代码" align="center" prop="doctorcode" />
<el-table-column label="医生名称" align="center" prop="doctorname" />
<el-table-column label="就诊流水号" align="center" width="100px" :show-overflow-tooltip="true" prop="serialflowno" />
<el-table-column label="就诊类别" align="center" prop="jzlb" />
<el-table-column label="账单信息" align="center" prop="billsmsg" />
<el-table-column label="支付类别" align="center" prop="paytype" />
<el-table-column label="支付ID" align="center" :show-overflow-tooltip="true" prop="powertranid" />
<el-table-column label="支付金额" align="center" prop="zfamount" />
<el-table-column label="工行ID" align="center" :show-overflow-tooltip="true" prop="icbcorderid" />
<el-table-column label="工行支付时间" align="center" width="100px" :show-overflow-tooltip="true" prop="icbcpaytime" />
<el-table-column label="提交时间" align="center" prop="ctime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.ctime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
</div>
</template>
<script>
import { createMzjf, updateMzjf, deleteMzjf, getMzjf, getMzjfPage, exportMzjfExcel } from "@/api/system/mzjf";
export default {
name: "Mzjf",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 门诊缴费列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
userId: null,
patientid: null,
// idtype: null,
// locktype: null,
// creatitemname: null,
// appointmenttime: [],
// creatdate: [],
// querytype: null,
// orderno: null,
// flowno: null,
// setdepartcode: null,
// setdepartname: null,
// dodepartcode: null,
// dodepartname: null,
// billtype: null,
// billname: null,
// billdes: null,
// billtime: [],
// billmoney: null,
// doctorcode: null,
// doctorname: null,
// sincemoney: null,
// fairmoney: null,
// serialno: null,
// appointno: null,
// serialflowno: null,
// jzlb: null,
// bzdm: null,
// updatedate: [],
// billsmsg: null,
// paynature: null,
// paytype: null,
// powertranid: null,
// powertrancard: null,
// terminalid: null,
// referno: null,
// zfamount: null,
// ybzhamount: null,
// ybtcamount: null,
// yboutmsg: null,
// hisopernum: null,
// icbcorderid: null,
// icbcpaytime: [],
// appFlag: null,
// appStatus: null,
// ctime: [],
// utime: [],
appStatus: null,
startDate: null,
endDate: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
const end = new Date();//获取当前的日期
this.queryParams.startDate=this.dateFormat(end);
this.queryParams.endDate=this.dateFormat(end);
this.getList();
},
methods: {
dateFormat(dateData) {
var date = new Date(dateData)
var y = date.getFullYear()
var m = date.getMonth() + 1
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
const time = y + '-' + m + '-' + d;
return time;
},
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getMzjfPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
userId: undefined,
cardId: undefined,
patientid: undefined,
idtype: undefined,
locktype: undefined,
creatitemname: undefined,
appointmenttime: undefined,
creatdate: undefined,
querytype: undefined,
orderno: undefined,
flowno: undefined,
setdepartcode: undefined,
setdepartname: undefined,
dodepartcode: undefined,
dodepartname: undefined,
billtype: undefined,
billname: undefined,
billdes: undefined,
billtime: undefined,
billmoney: undefined,
doctorcode: undefined,
doctorname: undefined,
sincemoney: undefined,
fairmoney: undefined,
serialno: undefined,
appointno: undefined,
serialflowno: undefined,
jzlb: undefined,
bzdm: undefined,
updatedate: undefined,
billsmsg: undefined,
paynature: undefined,
paytype: undefined,
powertranid: undefined,
powertrancard: undefined,
terminalid: undefined,
referno: undefined,
zfamount: undefined,
ybzhamount: undefined,
ybtcamount: undefined,
yboutmsg: undefined,
hisopernum: undefined,
icbcorderid: undefined,
icbcpaytime: undefined,
appFlag: undefined,
appStatus: undefined,
ctime: undefined,
utime: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForms");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加门诊缴费";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getMzjf(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改门诊缴费";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateMzjf(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createMzjf(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除门诊缴费编号为"' + id + '"的数据项?').then(function() {
return deleteMzjf(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有门诊缴费数据项?').then(() => {
this.exportLoading = true;
return exportMzjfExcel(params);
}).then(response => {
this.$download.excel(response, '门诊缴费.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,248 @@
<template>
<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="title">
<el-input v-model="queryParams.title" 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-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="queryParams.type" placeholder="公告类型" clearable>
<el-option v-for="dict in noticeTypeDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:notice:create']"s>新增</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="noticeList">
<el-table-column label="序号" align="center" prop="id" width="100" />
<el-table-column label="公告标题" align="center" prop="title" :show-overflow-tooltip="true"/>
<el-table-column label="公告类型" align="center" prop="type" width="100">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_NOTICE_TYPE" :value="scope.row.type"/>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status" width="100">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建者" align="center" prop="createBy" width="100" />
<el-table-column label="创建时间" align="center" prop="createTime" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</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:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:notice:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 添加或修改公告对话框 -->
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="公告标题" prop="title">
<el-input v-model="form.title" placeholder="请输入公告标题" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="公告类型" prop="type">
<el-select v-model="form.type" placeholder="请选择">
<el-option
v-for="dict in noticeTypeDictDatas"
:key="parseInt(dict.value)"
:label="dict.label"
:value="parseInt(dict.value)"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in statusDictDatas"
:key="parseInt(dict.value)"
:label="parseInt(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.content" :min-height="192"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listNotice, getNotice, delNotice, addNotice, updateNotice } from "@/api/system/notice";
import Editor from '@/components/Editor';
import {CommonStatusEnum} from '@/utils/constants'
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "Notice",
components: {
Editor
},
data() {
return {
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 公告表格数据
noticeList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
title: undefined,
createBy: undefined,
status: undefined
},
// 表单参数
form: {},
// 表单校验
rules: {
title: [
{ required: true, message: "公告标题不能为空", trigger: "blur" }
],
type: [
{ required: true, message: "公告类型不能为空", trigger: "change" }
]
},
// 枚举
CommonStatusEnum: CommonStatusEnum,
// 数据字典
noticeTypeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_NOTICE_TYPE),
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS)
};
},
created() {
this.getList();
},
methods: {
/** 查询公告列表 */
getList() {
this.loading = true;
listNotice(this.queryParams).then(response => {
this.noticeList = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
title: undefined,
type: undefined,
content: undefined,
status: CommonStatusEnum.ENABLE
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加公告";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getNotice(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改公告";
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updateNotice(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addNotice(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids
this.$modal.confirm('是否确认删除公告编号为"' + ids + '"的数据项?').then(function() {
return delNotice(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,226 @@
<template>
<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="userId">
<el-input v-model="queryParams.userId" placeholder="请输入用户号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="类型" prop="black">
<el-input v-model="queryParams.black" placeholder="请输入类型" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:nxbalcklist:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:nxbalcklist:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="id" align="center" prop="id" />
<el-table-column label="用户号" align="center" prop="userId" />
<el-table-column label="类型" align="center" prop="black" >
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.BLACKLIST_TYPE" :value="scope.row.black"/>
</template>
</el-table-column> /el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:nxbalcklist:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:nxbalcklist:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户号" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户号" />
</el-form-item>
<el-form-item label="类型" prop="black">
<el-input v-model="form.black" placeholder="请输入类型" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createnxbalcklist, updatenxbalcklist, deletenxbalcklist, getnxbalcklist, getnxbalcklistPage, exportnxbalcklistExcel } from "@/api/system/nxbalcklist";
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "nxbalcklist",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 黑名单列列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
userId: null,
black: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
},
// 数据字典
statusDictDatas: getDictDatas(DICT_TYPE.BLACKLIST_TYPE)
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getnxbalcklistPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
userId: undefined,
black: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加黑名单列";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getnxbalcklist(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改黑名单列";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updatenxbalcklist(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createnxbalcklist(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除黑名单列编号为"' + id + '"的数据项?').then(function() {
return deletenxbalcklist(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有黑名单列数据项?').then(() => {
this.exportLoading = true;
return exportnxbalcklistExcel(params);
}).then(response => {
this.$download.excel(response, '黑名单列.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,619 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="患者ID" prop="patientId">
<el-input v-model="queryParams.patientId" placeholder="请输入患者ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="患者姓名" prop="patientName">
<el-input v-model="queryParams.patientName" placeholder="请输入患者姓名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="患者身份证号" prop="idNumber">
<el-input v-model="queryParams.idNumber" placeholder="请输入患者身份证号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="患者电话" prop="phone">
<el-input v-model="queryParams.phone" placeholder="请输入患者电话" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="住院号" prop="hosNumber">
<el-input v-model="queryParams.hosNumber" placeholder="请输入住院号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="入院日期" prop="inhosDate">
<el-date-picker v-model="queryParams.inhosDate" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="出院日期" prop="outhosDate">
<el-date-picker v-model="queryParams.outhosDate" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<!-- <el-form-item label="办理类型(本人办理/他人代办)" prop="handleType">
<el-select v-model="queryParams.handleType" placeholder="请选择办理类型(本人办理/他人代办)" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item> -->
<el-form-item label="领取方式" prop="deliveryType">
<el-select v-model="queryParams.deliveryType" placeholder="请选择领取方式(邮寄/自取)" clearable size="small">
<el-option v-for="dict in typeDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
<!-- <el-form-item label="代办人姓名" prop="reName">
<el-input v-model="queryParams.reName" placeholder="请输入代办人姓名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="代办人身份证号" prop="reId">
<el-input v-model="queryParams.reId" placeholder="请输入代办人身份证号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="代办人电话" prop="rePhone">
<el-input v-model="queryParams.rePhone" placeholder="请输入代办人电话" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="患者身份证正面地址" prop="cardFronturl">
<el-input v-model="queryParams.cardFronturl" placeholder="请输入患者身份证正面地址" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="患者身份证反面地址" prop="cardBackurl">
<el-input v-model="queryParams.cardBackurl" placeholder="请输入患者身份证反面地址" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="代办委托书地址" prop="attorneyUrl">
<el-input v-model="queryParams.attorneyUrl" placeholder="请输入代办委托书地址" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="代办人身份证正面地址" prop="recordFronturl">
<el-input v-model="queryParams.recordFronturl" placeholder="请输入代办人身份证正面地址" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="代办人身份证反面地址" prop="recordBackurl">
<el-input v-model="queryParams.recordBackurl" placeholder="请输入代办人身份证反面地址" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="查询费默认10元" prop="selectAmount">
<el-input v-model="queryParams.selectAmount" placeholder="请输入查询费默认10元" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="查询页数" prop="pages">
<el-input v-model="queryParams.pages" placeholder="请输入查询页数" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="订单号 EX" prop="orderno">
<el-input v-model="queryParams.orderno" placeholder="请输入订单号 EX" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="his订单号" prop="reptno">
<el-input v-model="queryParams.reptno" placeholder="请输入his订单号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="需要支付金额" prop="amount">
<el-input v-model="queryParams.amount" placeholder="请输入需要支付金额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="领取状态0尚未领取/1已自取/2已邮寄" prop="send">
<el-input v-model="queryParams.send" placeholder="请输入领取状态0尚未领取/1已自取/2已邮寄" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="取件码" prop="code">
<el-input v-model="queryParams.code" placeholder="请输入取件码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item label="申请状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择申请状态" clearable size="small">
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:nxexpress:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:nxexpress:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-if="status !== 'constraint'" size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:nxexpress:update']">审核</el-button> -->
<!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:nxexpress:delete']">删除</el-button> -->
<!-- </template>
</el-table-column> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- 审核按钮待审核状态 -->
<el-button
v-if="scope.row.status === 3"
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:nxexpress:update']"
>审核</el-button>
<!-- 基于领取方式的操作按钮已支付状态 -->
<el-button
v-if="scope.row.status === 2 && scope.row.send === 0"
size="mini"
type="primary"
plain
@click="handleSend(scope.row)"
>自取或邮寄</el-button>
</template>
</el-table-column>
<el-table-column label="ID" align="center" prop="id" width="50"/>
<el-table-column label="患者ID" align="center" prop="patientId" width="100"/>
<el-table-column label="患者姓名" align="center" prop="patientName" />
<el-table-column label="患者身份证号" align="center" prop="idNumber" width="180" />
<el-table-column label="患者电话" align="center" prop="phone" width="120"/>
<el-table-column label="查询费" align="center" prop="selectAmount" />
<el-table-column label="查询页数" align="center" prop="pages" />
<el-table-column label="订单号 EX" align="center" prop="orderno" />
<el-table-column label="his订单号" align="center" prop="reptno" />
<el-table-column label="支付金额" align="center" prop="amount" />
<el-table-column label="状态" align="center" prop="status" >
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.EXPRESS_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>/>
<el-table-column label="领取状态" align="center" prop="send" >
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.EXPRESS_SEND" :value="scope.row.send"/>
</template>
</el-table-column>
<el-table-column label="取件码" align="center" prop="code" />
<el-table-column label="住院号" align="center" prop="hosNumber" />
<el-table-column label="入院日期" align="center" prop="inhosDate" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.inhosDate) }}</span>
</template>
</el-table-column>
<el-table-column label="出院日期" align="center" prop="outhosDate" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.outhosDate) }}</span>
</template>
</el-table-column>
<el-table-column label="办理类型" align="center" prop="handleType" >
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.EXPRESS_APPLY" :value="scope.row.handleType"/>
</template>
</el-table-column>
<el-table-column label="领取方式" align="center" prop="deliveryType" >
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.EXPRESS_TYPE" :value="scope.row.deliveryType"/>
</template>
</el-table-column>
<el-table-column label="代办人姓名" align="center" prop="reName" />
<el-table-column label="代办人身份证号" align="center" prop="reId" />
<el-table-column label="代办人电话" align="center" prop="rePhone" />
<el-table-column label="患者身份证正面地址" align="center" prop="cardFronturl" width="250">
<template slot-scope="scope">
<img v-if="scope.row.cardFronturl" :src="scope.row.cardFronturl" class="id-card-preview" @click="showImagePreview(scope.row.cardFronturl)">
</template>
</el-table-column>
<el-table-column label="患者身份证反面地址" align="center" prop="cardBackurl" width="250">
<template slot-scope="scope">
<img v-if="scope.row.cardBackurl" :src="scope.row.cardBackurl" class="id-card-preview" @click="showImagePreview(scope.row.cardBackurl)">
</template>
</el-table-column>
<el-table-column label="代办委托书地址" align="center" prop="attorneyUrl" width="250">
<template slot-scope="scope">
<img v-if="scope.row.attorneyUrl" :src="scope.row.attorneyUrl" class="id-card-preview" @click="showImagePreview(scope.row.attorneyUrl)">
</template>
</el-table-column>
<el-table-column label="代办人身份证正面地址" align="center" prop="recordFronturl" width="250">
<template slot-scope="scope">
<img v-if="scope.row.recordFronturl" :src="scope.row.recordFronturl" class="id-card-preview" @click="showImagePreview(scope.row.recordFronturl)">
</template>
</el-table-column>
<el-table-column label="代办人身份证反面地址" align="center" prop="recordBackurl" width="250">
<template slot-scope="scope">
<img v-if="scope.row.recordBackurl" :src="scope.row.recordBackurl" class="id-card-preview" @click="showImagePreview(scope.row.recordBackurl)">
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="140px">
<el-form-item label="查询页数" prop="pages">
<el-input v-model="form.pages" type="number" placeholder="请输入查询页数" @input="calcAmount"/>
</el-form-item>
<el-form-item label="查询费默认10元" prop="selectAmount">
<el-input v-model="form.selectAmount" placeholder="请输入查询费默认10元" disabled />
</el-form-item>
<el-form-item label="支付金额" prop="amount">
<el-input v-model="form.amount" placeholder="请输入支付金额" disabled />
</el-form-item>
<el-form-item label="申请状态" readonly prop="status">
<el-radio-group v-model="form.status" disabled>
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.EXPRESS_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="领取状态" prop="send">
<el-radio-group v-model="form.send" disabled>
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.EXPRESS_SEND)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="取件码" prop="code">
<el-input v-model="form.code" placeholder="请输入取件码" />
</el-form-item>
<el-form-item label="订单号 EX" prop="orderno">
<el-input v-model="form.orderno" placeholder="请输入订单号 EX" />
</el-form-item>
<el-form-item label="办理类型" prop="handleType">
<el-radio-group v-model="form.handleType" disabled>
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.EXPRESS_APPLY)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="领取方式" prop="deliveryType">
<el-radio-group v-model="form.deliveryType" disabled>
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.EXPRESS_TYPE)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="患者ID" prop="patientId">
<el-input v-model="form.patientId" placeholder="请输入患者ID" />
</el-form-item>
<el-form-item label="患者姓名" prop="patientName">
<el-input v-model="form.patientName" placeholder="请输入患者姓名" />
</el-form-item>
<el-form-item label="患者身份证号" prop="idNumber">
<el-input v-model="form.idNumber" placeholder="请输入患者身份证号" />
</el-form-item>
<el-form-item label="患者电话" prop="phone">
<el-input v-model="form.phone" placeholder="请输入患者电话" />
</el-form-item>
<el-form-item label="住院号" prop="hosNumber">
<el-input v-model="form.hosNumber" placeholder="请输入住院号" />
</el-form-item>
<el-form-item label="入院日期" prop="inhosDate">
<el-date-picker clearable v-model="form.inhosDate" type="date" value-format="timestamp" placeholder="选择入院日期" />
</el-form-item>
<el-form-item label="出院日期" prop="outhosDate">
<el-date-picker clearable v-model="form.outhosDate" type="date" value-format="timestamp" placeholder="选择出院日期" />
</el-form-item>
<el-form-item label="代办人姓名" prop="reName">
<el-input v-model="form.reName" placeholder="请输入代办人姓名" />
</el-form-item>
<el-form-item label="代办人身份证号" prop="reId">
<el-input v-model="form.reId" placeholder="请输入代办人身份证号" />
</el-form-item>
<el-form-item label="代办人电话" prop="rePhone">
<el-input v-model="form.rePhone" placeholder="请输入代办人电话" />
</el-form-item>
<el-form-item label="患者身份证正面" prop="cardFronturl">
<img v-if="form.cardFronturl" :src="form.cardFronturl" class="id-card-preview" @click="showImagePreview(form.cardFronturl)">
</el-form-item>
<el-form-item label="患者身份证反面" prop="cardBackurl">
<img v-if="form.cardBackurl" :src="form.cardBackurl" class="id-card-preview" @click="showImagePreview(form.cardBackurl)">
</el-form-item>
<el-form-item label="代办委托书" prop="attorneyUrl">
<img v-if="form.attorneyUrl" :src="form.attorneyUrl" class="id-card-preview" @click="showImagePreview(form.attorneyUrl)">
</el-form-item>
<el-form-item label="代办人身份证正面" prop="recordFronturl">
<img v-if="form.recordFronturl" :src="form.recordFronturl" class="id-card-preview" @click="showImagePreview(form.recordFronturl)">
</el-form-item>
<el-form-item label="代办人身份证反面" prop="recordBackurl">
<img v-if="form.recordBackurl" :src="form.recordBackurl" class="id-card-preview" @click="showImagePreview(form.recordBackurl)">
</el-form-item>
<el-form-item label="his订单号" prop="reptno">
<el-input v-model="form.reptno" placeholder="请输入his订单号" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 图片预览对话框 -->
<el-dialog
title="图片预览"
:visible.sync="imagePreviewVisible"
width="90%"
append-to-body
>
<div class="image-preview-container">
<img :src="previewImageUrl" class="preview-image">
</div>
</el-dialog>
</div>
</template>
<script>
import { createnxexpress, updatenxexpress, deletenxexpress, getnxexpress, getnxexpressPage, exportnxexpressExcel,updateSend } from "@/api/system/nxexpress";
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
export default {
name: "nxexpress",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 病案申请列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
patientId: null,
patientName: null,
idNumber: null,
phone: null,
hosNumber: null,
inhosDate: [],
outhosDate: [],
handleType: null,
deliveryType: null,
reName: null,
reId: null,
rePhone: null,
cardFronturl: null,
cardBackurl: null,
attorneyUrl: null,
recordFronturl: null,
recordBackurl: null,
selectAmount: null,
pages: null,
orderno: null,
reptno: null,
amount: null,
status: 3,
send: null,
code: null,
createTime: [],
},
// 表单参数
form: {},
// 图片预览相关
imagePreviewVisible: false,
previewImageUrl: '',
// 表单校验
rules: {
userId: [{ required: true, message: "申请人用户ID不能为空", trigger: "blur" }],
patientName: [{ required: true, message: "患者姓名不能为空", trigger: "blur" }],
idNumber: [{ required: true, message: "患者身份证号不能为空", trigger: "blur" }],
phone: [{ required: true, message: "患者电话不能为空", trigger: "blur" }],
hosNumber: [{ required: true, message: "住院号不能为空", trigger: "blur" }],
inhosDate: [{ required: true, message: "入院日期不能为空", trigger: "blur" }],
outhosDate: [{ required: true, message: "出院日期不能为空", trigger: "blur" }],
handleType: [{ required: true, message: "办理类型(本人办理/他人代办)不能为空", trigger: "change" }],
deliveryType: [{ required: true, message: "领取方式(邮寄/自取)不能为空", trigger: "change" }],
cardFronturl: [{ required: true, message: "患者身份证正面地址不能为空", trigger: "blur" }],
cardBackurl: [{ required: true, message: "患者身份证反面地址不能为空", trigger: "blur" }],
selectAmount: [{ required: true, message: "查询费默认10元不能为空", trigger: "blur" }],
status: [{ required: true, message: "状态0已退费/1待支付/2已支付/3待审核不能为空", trigger: "blur" }],
send: [{ required: true, message: "领取状态0尚未领取/1已自取/2已邮寄不能为空", trigger: "blur" }],
},
statusDictDatas: getDictDatas(DICT_TYPE.EXPRESS_STATUS),
sendDictDatas: getDictDatas(DICT_TYPE.EXPRESS_SEND),
typeDictDatas: getDictDatas(DICT_TYPE.EXPRESS_TYPE),
};
},
created() {
this.getList();
},
methods: {
// 显示图片预览
showImagePreview(url) {
this.previewImageUrl = url;
this.imagePreviewVisible = true;
},
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getnxexpressPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
// 页数变化时自动计算支付金额
calcAmount() {
// 保证 pages 是数字
const pages = Number(this.form.pages) || 0;
this.form.amount = (10 + 0.5 * pages).toFixed(2);
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
userId: undefined,
patientName: undefined,
idNumber: undefined,
phone: undefined,
hosNumber: undefined,
inhosDate: undefined,
outhosDate: undefined,
handleType: undefined,
deliveryType: undefined,
reName: undefined,
reId: undefined,
rePhone: undefined,
cardFronturl: undefined,
cardBackurl: undefined,
attorneyUrl: undefined,
recordFronturl: undefined,
recordBackurl: undefined,
selectAmount: undefined,
pages: undefined,
orderno: undefined,
reptno: undefined,
amount: undefined,
status: undefined,
send: undefined,
code: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
// 手动重置查询参数,确保清空状态正确保存
this.queryParams.deliveryType = null;
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加病案申请";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getnxexpress(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改病案申请";
});
},
/**邮寄/自取按钮操作 */
handleSend(row) {
this.reset();
const id = row.id;
getnxexpress(id).then(response => {
this.form = response.data;
console.log(this.form, "form");
if(this.form.deliveryType == "1"){
this.form.send = 1;
}
if(this.form.deliveryType == "2"){
this.form.send = 2;
}
console.log(this.form, "form1");
// 修改的提交
if (this.form.id != null) {
updateSend(this.form).then(response => {
this.$modal.msgSuccess("操作成功");
this.open = false;
this.getList();
});
}
});
// updateSend(id).then(res =>{
// if(res.code === 200){
// this.$modal.msgSuccess("操作成功");
// this.getList();
// }
// })
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updatenxexpress(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createnxexpress(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除病案申请编号为"' + id + '"的数据项?').then(function() {
return deletenxexpress(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有病案申请数据项?').then(() => {
this.exportLoading = true;
return exportnxexpressExcel(params);
}).then(response => {
this.$download.excel(response, '病案申请.xls');
this.exportLoading = false;
}).catch(() => {});
},
}
};
</script>
<style scoped>
.id-card-preview {
max-width: 240px;
max-height: 150px;
cursor: pointer;
transition: all 0.3s;
}
.id-card-preview:hover {
transform: scale(1.05);
}
.image-preview-container {
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
}
.preview-image {
max-width: 100%;
max-height: 80vh;
object-fit: contain;
}
</style>

View File

@@ -0,0 +1,304 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入应用名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:oauth2-client:create']">新增</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="客户端编号" align="center" prop="clientId" />
<el-table-column label="客户端密钥" align="center" prop="secret" />
<el-table-column label="应用名" align="center" prop="name" />
<el-table-column label="应用图标" align="center" prop="logo">
<template slot-scope="scope">
<img width="40px" height="40px" :src="scope.row.logo">
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="访问令牌的有效期" align="center" prop="accessTokenValiditySeconds">
<template slot-scope="scope">{{ scope.row.accessTokenValiditySeconds }} </template>
</el-table-column>
<el-table-column label="刷新令牌的有效期" align="center" prop="refreshTokenValiditySeconds">
<template slot-scope="scope">{{ scope.row.refreshTokenValiditySeconds }} </template>
</el-table-column>
<el-table-column label="授权类型" align="center" prop="authorizedGrantTypes">
<template slot-scope="scope">
<el-tag :disable-transitions="true" :key="index" v-for="(authorizedGrantType, index) in scope.row.authorizedGrantTypes" :index="index">
{{ authorizedGrantType }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:oauth2-client:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:oauth2-client:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="160px">
<el-form-item label="客户端编号" prop="secret">
<el-input v-model="form.clientId" placeholder="请输入客户端编号" />
</el-form-item>
<el-form-item label="客户端密钥" prop="secret">
<el-input v-model="form.secret" placeholder="请输入客户端密钥" />
</el-form-item>
<el-form-item label="应用名" prop="name">
<el-input v-model="form.name" placeholder="请输入应用名" />
</el-form-item>
<el-form-item label="应用图标">
<imageUpload v-model="form.logo" :limit="1"/>
</el-form-item>
<el-form-item label="应用描述">
<el-input type="textarea" v-model="form.description" placeholder="请输入应用名" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="访问令牌的有效期" prop="accessTokenValiditySeconds">
<el-input-number v-model="form.accessTokenValiditySeconds" placeholder="单位:秒" />
</el-form-item>
<el-form-item label="刷新令牌的有效期" prop="refreshTokenValiditySeconds">
<el-input-number v-model="form.refreshTokenValiditySeconds" placeholder="单位:秒" />
</el-form-item>
<el-form-item label="授权类型" prop="authorizedGrantTypes">
<el-select v-model="form.authorizedGrantTypes" multiple filterable placeholder="请输入授权类型" style="width: 500px" >
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_OAUTH2_GRANT_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="授权范围" prop="scopes">
<el-select v-model="form.scopes" multiple filterable allow-create placeholder="请输入授权范围" style="width: 500px" >
<el-option v-for="scope in form.scopes" :key="scope" :label="scope" :value="scope"/>
</el-select>
</el-form-item>
<el-form-item label="自动授权范围" prop="autoApproveScopes">
<el-select v-model="form.autoApproveScopes" multiple filterable placeholder="请输入授权范围" style="width: 500px" >
<el-option v-for="scope in form.scopes" :key="scope" :label="scope" :value="scope"/>
</el-select>
</el-form-item>
<el-form-item label="可重定向的 URI 地址" prop="redirectUris">
<el-select v-model="form.redirectUris" multiple filterable allow-create placeholder="请输入可重定向的 URI 地址" style="width: 500px" >
<el-option v-for="redirectUri in form.redirectUris" :key="redirectUri" :label="redirectUri" :value="redirectUri"/>
</el-select>
</el-form-item>
<el-form-item label="权限" prop="authorities">
<el-select v-model="form.authorities" multiple filterable allow-create placeholder="请输入权限" style="width: 500px" >
<el-option v-for="authority in form.authorities" :key="authority" :label="authority" :value="authority"/>
</el-select>
</el-form-item>
<el-form-item label="资源" prop="resourceIds">
<el-select v-model="form.resourceIds" multiple filterable allow-create placeholder="请输入资源" style="width: 500px" >
<el-option v-for="resourceId in form.resourceIds" :key="resourceId" :label="resourceId" :value="resourceId"/>
</el-select>
</el-form-item>
<el-form-item label="附加信息" prop="additionalInformation">
<el-input type="textarea" v-model="form.additionalInformation" placeholder="请输入附加信息JSON 格式数据" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createOAuth2Client, updateOAuth2Client, deleteOAuth2Client, getOAuth2Client, getOAuth2ClientPage } from "@/api/system/oauth2/oauth2Client";
import ImageUpload from '@/components/ImageUpload';
import Editor from '@/components/Editor';
import {CommonStatusEnum} from "@/utils/constants";
import FileUpload from "@/components/FileUpload";
export default {
name: "OAuth2Client",
components: {
FileUpload,
ImageUpload,
Editor,
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// OAuth2 客户端列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
status: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
clientId: [{ required: true, message: "客户端编号不能为空", trigger: "blur" }],
secret: [{ required: true, message: "客户端密钥不能为空", trigger: "blur" }],
name: [{ required: true, message: "应用名不能为空", trigger: "blur" }],
logo: [{ required: true, message: "应用图标不能为空", trigger: "blur" }],
status: [{ required: true, message: "状态不能为空", trigger: "blur" }],
accessTokenValiditySeconds: [{ required: true, message: "访问令牌的有效期不能为空", trigger: "blur" }],
refreshTokenValiditySeconds: [{ required: true, message: "刷新令牌的有效期不能为空", trigger: "blur" }],
redirectUris: [{ required: true, message: "可重定向的 URI 地址不能为空", trigger: "blur" }],
authorizedGrantTypes: [{ required: true, message: "授权类型不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getOAuth2ClientPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
clientId: undefined,
secret: undefined,
name: undefined,
logo: undefined,
description: undefined,
status: CommonStatusEnum.ENABLE,
accessTokenValiditySeconds: 30 * 60,
refreshTokenValiditySeconds: 30 * 24 * 60,
redirectUris: [],
authorizedGrantTypes: [],
scopes: [],
autoApproveScopes: [],
authorities: [],
resourceIds: [],
additionalInformation: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加 OAuth2 客户端";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getOAuth2Client(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改 OAuth2 客户端";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateOAuth2Client(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createOAuth2Client(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除客户端编号为"' + row.clientId + '"的数据项?').then(function() {
return deleteOAuth2Client(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,110 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="用户编号" prop="userId">
<el-input v-model="queryParams.userId" placeholder="请输入用户编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="用户类型" prop="userType">
<el-select v-model="queryParams.userType" placeholder="请选择用户类型" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.USER_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="list" style="width: 100%;">
<el-table-column label="访问令牌" align="center" prop="accessToken" width="300" />
<el-table-column label="刷新令牌" align="center" prop="refreshToken" width="300" />
<el-table-column label="用户编号" align="center" prop="userId" />
<el-table-column label="用户类型" align="center" prop="userType" width="100">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.USER_TYPE" :value="scope.row.userType"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="过期时间" align="center" prop="expiresTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.expiresTime) }}</span>
</template>
</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-delete" @click="handleForceLogout(scope.row)"
v-hasPermi="['system:oauth2-token:delete']">强退</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
</div>
</template>
<script>
import { getAccessTokenPage, deleteAccessToken } from "@/api/system/oauth2/oauth2Token";
export default {
name: "OAuth2Token",
data() {
return {
// 遮罩层
loading: true,
// 总条数
total: 0,
// 表格数据
list: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
userId: undefined,
userType: undefined
}
};
},
created() {
this.getList();
},
methods: {
/** 查询登录日志列表 */
getList() {
this.loading = true;
getAccessTokenPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 强退按钮操作 */
handleForceLogout(row) {
this.$modal.confirm('是否确认强退令牌为"' + row.accessToken + '"的数据项?').then(function() {
return deleteAccessToken(row.accessToken);
}).then(() => {
this.getList();
this.$modal.msgSuccess("强退成功");
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,213 @@
<template>
<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="title">
<el-input v-model="queryParams.title" placeholder="请输入系统模块" clearable style="width: 240px;"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="操作人员" prop="operName">
<el-input v-model="queryParams.operName" placeholder="请输入操作人员" clearable style="width: 240px;"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="queryParams.type" placeholder="操作类型" clearable style="width: 240px">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_OPERATE_TYPE)" :key="parseInt(dict.value)"
:label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.success" placeholder="操作状态" clearable style="width: 240px">
<el-option :key="true" label="成功" :value="true"/>
<el-option :key="false" label="失败" :value="false"/>
</el-select>
</el-form-item>
<el-form-item label="操作时间" prop="startTime">
<el-date-picker v-model="queryParams.startTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:operate-log:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="list">
<el-table-column label="日志编号" align="center" prop="id" />
<el-table-column label="操作模块" align="center" prop="module" />
<el-table-column label="操作名" align="center" prop="name" width="180" />
<el-table-column label="操作类型" align="center" prop="type">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_OPERATE_TYPE" :value="scope.row.type"/>
</template>
</el-table-column>
<el-table-column label="操作人" align="center" prop="userNickname" />
<el-table-column label="操作结果" align="center" prop="status">
<template slot-scope="scope">
<span>{{ scope.row.resultCode === 0 ? '成功' : '失败' }}</span>
</template>
</el-table-column>
<el-table-column label="操作日期" align="center" prop="startTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.startTime) }}</span>
</template>
</el-table-column>
<el-table-column label="执行时长" align="center" prop="startTime">
<template slot-scope="scope">
<span>{{ scope.row.duration }} ms</span>
</template>
</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-view" @click="handleView(scope.row,scope.index)"
v-hasPermi="['system:operate-log:query']">详细</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 操作日志详细 -->
<el-dialog title="访问日志详细" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="100px" size="mini">
<el-row>
<el-col :span="24">
<el-form-item label="日志主键:">{{ form.id }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="链路追踪:">{{ form.traceId }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="用户信息:">{{ form.userId }} | {{ form.userNickname }} | {{ form.userIp }} | {{ form.userAgent}} </el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="操作信息:">
{{ form.module }} | {{ form.name }}
<dict-tag :type="DICT_TYPE.SYSTEM_OPERATE_TYPE" :value="form.type"/>
<br /> {{ form.content }}
<br /> {{ form.exts }}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="请求信息:">{{ form.requestMethod }} | {{ form.requestUrl }} </el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="方法名:">{{ form.javaMethod }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="方法参数:">{{ form.javaMethodArgs }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="开始时间:">
{{ parseTime(form.startTime) }} | {{ form.duration }} ms
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="操作结果:">
<div v-if="form.resultCode === 0">正常 | {{ form.resultData}} </div>
<div v-else-if="form.resultCode > 0">失败 | {{ form.resultCode }} || {{ form.resultMsg}}</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listOperateLog, exportOperateLog } from "@/api/system/operatelog";
export default {
name: "Operlog",
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 表格数据
list: [],
// 是否显示弹出层
open: false,
// 类型数据字典
typeOptions: [],
// 类型数据字典
statusOptions: [],
// 表单参数
form: {},
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
title: undefined,
operName: undefined,
businessType: undefined,
status: undefined,
startTime: []
},
};
},
created() {
this.getList();
},
methods: {
/** 查询登录日志 */
getList() {
this.loading = true;
listOperateLog(this.queryParams).then( response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
}
);
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 详细按钮操作 */
handleView(row) {
this.open = true;
this.form = row;
},
/** 导出按钮操作 */
handleExport() {
this.$modal.confirm('是否确认导出所有操作日志数据项?').then(() => {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.exportLoading = true;
return exportOperateLog(params);
}).then(response => {
this.$download.excel(response, '操作日志.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,245 @@
<template>
<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="code">
<el-input v-model="queryParams.code" placeholder="请输入岗位编码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="岗位名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入岗位名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="岗位状态" clearable>
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:post:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:post:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="postList">
<el-table-column label="岗位编号" align="center" prop="id" />
<el-table-column label="岗位编码" align="center" prop="code" />
<el-table-column label="岗位名称" align="center" prop="name" />
<el-table-column label="岗位排序" align="center" prop="sort" />
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:post:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:post:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 添加或修改岗位对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="岗位名称" prop="name">
<el-input v-model="form.name" placeholder="请输入岗位名称" />
</el-form-item>
<el-form-item label="岗位编码" prop="code">
<el-input v-model="form.code" placeholder="请输入编码名称" />
</el-form-item>
<el-form-item label="岗位顺序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="岗位状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="parseInt(dict.value)">
{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPost, getPost, delPost, addPost, updatePost, exportPost } from "@/api/system/post";
import {CommonStatusEnum} from '@/utils/constants'
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
name: "Post",
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 岗位表格数据
postList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 状态数据字典
statusOptions: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
code: undefined,
name: undefined,
status: undefined
},
// 表单参数
form: {},
// 表单校验
rules: {
name: [
{ required: true, message: "岗位名称不能为空", trigger: "blur" }
],
code: [
{ required: true, message: "岗位编码不能为空", trigger: "blur" }
],
sort: [
{ required: true, message: "岗位顺序不能为空", trigger: "blur" }
]
},
// 枚举
CommonStatusEnum: CommonStatusEnum,
// 数据字典
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS)
};
},
created() {
this.getList();
},
methods: {
/** 查询岗位列表 */
getList() {
this.loading = true;
listPost(this.queryParams).then(response => {
this.postList = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
code: undefined,
name: undefined,
sort: 0,
status: CommonStatusEnum.ENABLE,
remark: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加岗位";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id
getPost(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改岗位";
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updatePost(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPost(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id;
this.$modal.confirm('是否确认删除岗位编号为"' + ids + '"的数据项?').then(function() {
return delPost(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有岗位数据项?').then(() => {
this.exportLoading = true;
return exportPost(queryParams);
}).then(response => {
this.$download.excel(response, '岗位数据.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,586 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="queryParams.userId" placeholder="请输入用户ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="就诊卡id" prop="cardId">
<el-input v-model="queryParams.cardId" placeholder="请输入就诊卡id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="病人名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入病人名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="科室名称" prop="ksmc">
<el-input v-model="queryParams.ksmc" placeholder="请输入科室名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医生名称" prop="ysmc">
<el-input v-model="queryParams.ysmc" placeholder="请输入医生名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="院区 ID" prop="subHospitalID">
<el-input v-model="queryParams.subHospitalID" placeholder="请输入院区 ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="票据编号" prop="reptNum">
<el-input v-model="queryParams.reptNum" placeholder="请输入票据编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="操作类型" prop="lockType">
<el-select v-model="queryParams.lockType" placeholder="请选择操作类型" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="订单 ID" prop="hisOrderNO">
<el-input v-model="queryParams.hisOrderNO" placeholder="请输入订单 ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="排班 ID" prop="scheduleId">
<el-input v-model="queryParams.scheduleId" placeholder="请输入排班 ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医生编码" prop="doctorCode">
<el-input v-model="queryParams.doctorCode" placeholder="请输入医生编码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="科室编码" prop="departCode">
<el-input v-model="queryParams.departCode" placeholder="请输入科室编码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="分时 ID" prop="parTimeId">
<el-input v-model="queryParams.parTimeId" placeholder="请输入分时 ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="锁号时间" prop="lockTime">
<el-date-picker v-model="queryParams.lockTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="患者 ID" prop="patientId">
<el-input v-model="queryParams.patientId" placeholder="请输入患者 ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="手机号码" prop="mobile">
<el-input v-model="queryParams.mobile" placeholder="请输入手机号码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="就诊序号" prop="serialNo">
<el-input v-model="queryParams.serialNo" placeholder="请输入就诊序号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="就诊地址" prop="location">
<el-input v-model="queryParams.location" placeholder="请输入就诊地址" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="号票编号" prop="ticketNo">
<el-input v-model="queryParams.ticketNo" placeholder="请输入号票编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="取号确认订单ID" prop="orderNo">
<el-input v-model="queryParams.orderNo" placeholder="请输入取号确认订单ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="取号确认时间段" prop="timeInterval">
<el-input v-model="queryParams.timeInterval" placeholder="请输入取号确认时间段" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="出诊日期" prop="registerdate">
<el-date-picker v-model="queryParams.registerdate" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="诊查费" prop="clinicFee">
<el-input v-model="queryParams.clinicFee" placeholder="请输入诊查费" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="挂号费" prop="registrationFee">
<el-input v-model="queryParams.registrationFee" placeholder="请输入挂号费" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="收费性质" prop="payNature">
<el-input v-model="queryParams.payNature" placeholder="请输入收费性质" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="支付方式" prop="payType">
<el-select v-model="queryParams.payType" placeholder="请选择支付方式" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="交易 ID" prop="powerTranID">
<el-input v-model="queryParams.powerTranID" placeholder="请输入交易 ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="交易 卡号(扫码支付)" prop="powerTranCARD">
<el-input v-model="queryParams.powerTranCARD" placeholder="请输入交易 卡号(扫码支付)" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="MISPOS终端号" prop="terminalId">
<el-input v-model="queryParams.terminalId" placeholder="请输入MISPOS终端号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="自费支付金额" prop="zFAmount">
<el-input v-model="queryParams.zFAmount" placeholder="请输入自费支付金额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医保账户金额" prop="yBZHAmount">
<el-input v-model="queryParams.yBZHAmount" placeholder="请输入医保账户金额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医保统筹金额" prop="yBTCAmount">
<el-input v-model="queryParams.yBTCAmount" placeholder="请输入医保统筹金额" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="医保结算信息" prop="yBOutMsg">
<el-input v-model="queryParams.yBOutMsg" placeholder="请输入医保结算信息" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="HIS 工号" prop="hisOperNum">
<el-input v-model="queryParams.hisOperNum" placeholder="请输入HIS 工号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="交易检索号(银行)" prop="referNo">
<el-input v-model="queryParams.referNo" placeholder="请输入交易检索号(银行)" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="token" prop="token">
<el-input v-model="queryParams.token" placeholder="请输入token" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="允许退号标志 N 不允许 Y 允许" prop="appFlag">
<el-input v-model="queryParams.appFlag" placeholder="请输入允许退号标志 N 不允许 Y 允许" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="单据状态 1 已退费 0 正常" prop="appStatus">
<el-select v-model="queryParams.appStatus" placeholder="请选择单据状态 1 已退费 0 正常" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="1 预约挂号 2 今日挂号" prop="appType">
<el-select v-model="queryParams.appType" placeholder="请选择1 预约挂号 2 今日挂号" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="提交时间" prop="ctime">
<el-date-picker v-model="queryParams.ctime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="修改时间" prop="utime">
<el-date-picker v-model="queryParams.utime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:reserve8:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:reserve8:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="用户ID" align="center" prop="userId" />
<el-table-column label="就诊卡id" align="center" prop="cardId" />
<el-table-column label="病人名称" align="center" prop="name" />
<el-table-column label="科室名称" align="center" prop="ksmc" />
<el-table-column label="医生名称" align="center" prop="ysmc" />
<el-table-column label="院区 ID" align="center" prop="subHospitalID" />
<el-table-column label="票据编号" align="center" prop="reptNum" />
<el-table-column label="操作类型" align="center" prop="lockType" />
<el-table-column label="订单 ID" align="center" prop="hisOrderNO" />
<el-table-column label="排班 ID" align="center" prop="scheduleId" />
<el-table-column label="医生编码" align="center" prop="doctorCode" />
<el-table-column label="科室编码" align="center" prop="departCode" />
<el-table-column label="分时 ID" align="center" prop="parTimeId" />
<el-table-column label="锁号时间" align="center" prop="lockTime" />
<el-table-column label="患者 ID" align="center" prop="patientId" />
<el-table-column label="手机号码" align="center" prop="mobile" />
<el-table-column label="就诊序号" align="center" prop="serialNo" />
<el-table-column label="就诊地址" align="center" prop="location" />
<el-table-column label="号票编号" align="center" prop="ticketNo" />
<el-table-column label="取号确认订单ID" align="center" prop="orderNo" />
<el-table-column label="取号确认时间段" align="center" prop="timeInterval" />
<el-table-column label="出诊日期" align="center" prop="registerdate" />
<el-table-column label="诊查费" align="center" prop="clinicFee" />
<el-table-column label="挂号费" align="center" prop="registrationFee" />
<el-table-column label="收费性质" align="center" prop="payNature" />
<el-table-column label="支付方式" align="center" prop="payType" />
<el-table-column label="交易 ID" align="center" prop="powerTranID" />
<el-table-column label="交易 卡号(扫码支付)" align="center" prop="powerTranCARD" />
<el-table-column label="MISPOS终端号" align="center" prop="terminalId" />
<el-table-column label="自费支付金额" align="center" prop="zFAmount" />
<el-table-column label="医保账户金额" align="center" prop="yBZHAmount" />
<el-table-column label="医保统筹金额" align="center" prop="yBTCAmount" />
<el-table-column label="医保结算信息" align="center" prop="yBOutMsg" />
<el-table-column label="HIS 工号" align="center" prop="hisOperNum" />
<el-table-column label="交易检索号(银行)" align="center" prop="referNo" />
<el-table-column label="token" align="center" prop="token" />
<el-table-column label="允许退号标志 N 不允许 Y 允许" align="center" prop="appFlag" />
<el-table-column label="单据状态 1 已退费 0 正常" align="center" prop="appStatus" />
<el-table-column label="1 预约挂号 2 今日挂号" align="center" prop="appType" />
<el-table-column label="提交时间" align="center" prop="ctime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.ctime) }}</span>
</template>
</el-table-column>
<el-table-column label="修改时间" align="center" prop="utime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.utime) }}</span>
</template>
</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:reserve8:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:reserve8:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户ID" />
</el-form-item>
<el-form-item label="就诊卡id" prop="cardId">
<el-input v-model="form.cardId" placeholder="请输入就诊卡id" />
</el-form-item>
<el-form-item label="病人名称" prop="name">
<el-input v-model="form.name" placeholder="请输入病人名称" />
</el-form-item>
<el-form-item label="科室名称" prop="ksmc">
<el-input v-model="form.ksmc" placeholder="请输入科室名称" />
</el-form-item>
<el-form-item label="医生名称" prop="ysmc">
<el-input v-model="form.ysmc" placeholder="请输入医生名称" />
</el-form-item>
<el-form-item label="院区 ID" prop="subHospitalID">
<el-input v-model="form.subHospitalID" placeholder="请输入院区 ID" />
</el-form-item>
<el-form-item label="票据编号" prop="reptNum">
<el-input v-model="form.reptNum" placeholder="请输入票据编号" />
</el-form-item>
<el-form-item label="操作类型" prop="lockType">
<el-select v-model="form.lockType" placeholder="请选择操作类型">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="订单 ID" prop="hisOrderNO">
<el-input v-model="form.hisOrderNO" placeholder="请输入订单 ID" />
</el-form-item>
<el-form-item label="排班 ID" prop="scheduleId">
<el-input v-model="form.scheduleId" placeholder="请输入排班 ID" />
</el-form-item>
<el-form-item label="医生编码" prop="doctorCode">
<el-input v-model="form.doctorCode" placeholder="请输入医生编码" />
</el-form-item>
<el-form-item label="科室编码" prop="departCode">
<el-input v-model="form.departCode" placeholder="请输入科室编码" />
</el-form-item>
<el-form-item label="分时 ID" prop="parTimeId">
<el-input v-model="form.parTimeId" placeholder="请输入分时 ID" />
</el-form-item>
<el-form-item label="锁号时间" prop="lockTime">
<el-date-picker clearable v-model="form.lockTime" type="date" value-format="timestamp" placeholder="选择锁号时间" />
</el-form-item>
<el-form-item label="患者 ID" prop="patientId">
<el-input v-model="form.patientId" placeholder="请输入患者 ID" />
</el-form-item>
<el-form-item label="手机号码" prop="mobile">
<el-input v-model="form.mobile" placeholder="请输入手机号码" />
</el-form-item>
<el-form-item label="就诊序号" prop="serialNo">
<el-input v-model="form.serialNo" placeholder="请输入就诊序号" />
</el-form-item>
<el-form-item label="就诊地址" prop="location">
<el-input v-model="form.location" placeholder="请输入就诊地址" />
</el-form-item>
<el-form-item label="号票编号" prop="ticketNo">
<el-input v-model="form.ticketNo" placeholder="请输入号票编号" />
</el-form-item>
<el-form-item label="取号确认订单ID" prop="orderNo">
<el-input v-model="form.orderNo" placeholder="请输入取号确认订单ID" />
</el-form-item>
<el-form-item label="取号确认时间段" prop="timeInterval">
<el-input v-model="form.timeInterval" placeholder="请输入取号确认时间段" />
</el-form-item>
<el-form-item label="出诊日期" prop="registerdate">
<el-date-picker clearable v-model="form.registerdate" type="date" value-format="timestamp" placeholder="选择出诊日期" />
</el-form-item>
<el-form-item label="诊查费" prop="clinicFee">
<el-input v-model="form.clinicFee" placeholder="请输入诊查费" />
</el-form-item>
<el-form-item label="挂号费" prop="registrationFee">
<el-input v-model="form.registrationFee" placeholder="请输入挂号费" />
</el-form-item>
<el-form-item label="收费性质" prop="payNature">
<el-input v-model="form.payNature" placeholder="请输入收费性质" />
</el-form-item>
<el-form-item label="支付方式" prop="payType">
<el-select v-model="form.payType" placeholder="请选择支付方式">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="交易 ID" prop="powerTranID">
<el-input v-model="form.powerTranID" placeholder="请输入交易 ID" />
</el-form-item>
<el-form-item label="交易 卡号(扫码支付)" prop="powerTranCARD">
<el-input v-model="form.powerTranCARD" placeholder="请输入交易 卡号(扫码支付)" />
</el-form-item>
<el-form-item label="MISPOS终端号" prop="terminalId">
<el-input v-model="form.terminalId" placeholder="请输入MISPOS终端号" />
</el-form-item>
<el-form-item label="自费支付金额" prop="zFAmount">
<el-input v-model="form.zFAmount" placeholder="请输入自费支付金额" />
</el-form-item>
<el-form-item label="医保账户金额" prop="yBZHAmount">
<el-input v-model="form.yBZHAmount" placeholder="请输入医保账户金额" />
</el-form-item>
<el-form-item label="医保统筹金额" prop="yBTCAmount">
<el-input v-model="form.yBTCAmount" placeholder="请输入医保统筹金额" />
</el-form-item>
<el-form-item label="医保结算信息" prop="yBOutMsg">
<el-input v-model="form.yBOutMsg" placeholder="请输入医保结算信息" />
</el-form-item>
<el-form-item label="HIS 工号" prop="hisOperNum">
<el-input v-model="form.hisOperNum" placeholder="请输入HIS 工号" />
</el-form-item>
<el-form-item label="交易检索号(银行)" prop="referNo">
<el-input v-model="form.referNo" placeholder="请输入交易检索号(银行)" />
</el-form-item>
<el-form-item label="token" prop="token">
<el-input v-model="form.token" placeholder="请输入token" />
</el-form-item>
<el-form-item label="允许退号标志 N 不允许 Y 允许" prop="appFlag">
<el-input v-model="form.appFlag" placeholder="请输入允许退号标志 N 不允许 Y 允许" />
</el-form-item>
<el-form-item label="单据状态 1 已退费 0 正常" prop="appStatus">
<el-radio-group v-model="form.appStatus">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="1 预约挂号 2 今日挂号" prop="appType">
<el-select v-model="form.appType" placeholder="请选择1 预约挂号 2 今日挂号">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="提交时间" prop="ctime">
<el-date-picker clearable v-model="form.ctime" type="date" value-format="timestamp" placeholder="选择提交时间" />
</el-form-item>
<el-form-item label="修改时间" prop="utime">
<el-date-picker clearable v-model="form.utime" type="date" value-format="timestamp" placeholder="选择修改时间" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createReserve8, updateReserve8, deleteReserve8, getReserve8, getReserve8Page, exportReserve8Excel } from "@/api/system/reserve8";
export default {
name: "Reserve8",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 预约挂号列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
userId: null,
cardId: null,
name: null,
ksmc: null,
ysmc: null,
subHospitalID: null,
reptNum: null,
lockType: null,
hisOrderNO: null,
scheduleId: null,
doctorCode: null,
departCode: null,
parTimeId: null,
lockTime: [],
patientId: null,
mobile: null,
serialNo: null,
location: null,
ticketNo: null,
orderNo: null,
timeInterval: null,
registerdate: [],
clinicFee: null,
registrationFee: null,
payNature: null,
payType: null,
powerTranID: null,
powerTranCARD: null,
terminalId: null,
zFAmount: null,
yBZHAmount: null,
yBTCAmount: null,
yBOutMsg: null,
hisOperNum: null,
referNo: null,
token: null,
appFlag: null,
appStatus: null,
appType: null,
ctime: [],
utime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getReserve8Page(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
userId: undefined,
cardId: undefined,
name: undefined,
ksmc: undefined,
ysmc: undefined,
subHospitalID: undefined,
reptNum: undefined,
lockType: undefined,
hisOrderNO: undefined,
scheduleId: undefined,
doctorCode: undefined,
departCode: undefined,
parTimeId: undefined,
lockTime: undefined,
patientId: undefined,
mobile: undefined,
serialNo: undefined,
location: undefined,
ticketNo: undefined,
orderNo: undefined,
timeInterval: undefined,
registerdate: undefined,
clinicFee: undefined,
registrationFee: undefined,
payNature: undefined,
payType: undefined,
powerTranID: undefined,
powerTranCARD: undefined,
terminalId: undefined,
zFAmount: undefined,
yBZHAmount: undefined,
yBTCAmount: undefined,
yBOutMsg: undefined,
hisOperNum: undefined,
referNo: undefined,
token: undefined,
appFlag: undefined,
appStatus: undefined,
appType: undefined,
ctime: undefined,
utime: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加预约挂号";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getReserve8(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改预约挂号";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateReserve8(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createReserve8(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除预约挂号编号为"' + id + '"的数据项?').then(function() {
return deleteReserve8(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有预约挂号数据项?').then(() => {
this.exportLoading = true;
return exportReserve8Excel(params);
}).then(response => {
this.$download.excel(response, '预约挂号.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,301 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="queryParams.userId" placeholder="请输入用户ID" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="就诊卡id" prop="cardId">
<el-input v-model="queryParams.cardId" placeholder="请输入就诊卡id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="病人名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入病人名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="开始时间" prop="startDate">
<el-date-picker v-model="queryParams.startDate" style="width: 240px" value-format="yyyy-MM-dd" type="date"/>
</el-form-item>
<el-form-item label="结束时间" prop="endDate">
<el-date-picker v-model="queryParams.endDate" style="width: 240px" value-format="yyyy-MM-dd" type="date"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="用户ID" align="center" prop="userId" />
<el-table-column label="患者 ID" align="center" width="100px" prop="patientId" />
<el-table-column label="病人名称" align="center" prop="name" />
<el-table-column label="科室名称" align="center" :show-overflow-tooltip="true" prop="ksmc" />
<el-table-column label="医生名称" align="center" prop="ysmc" />
<el-table-column label="票据编号" align="center" :show-overflow-tooltip="true" prop="reptNum" />
<el-table-column label="排班 ID" align="center" :show-overflow-tooltip="true" prop="scheduleId" />
<el-table-column label="医生编码" align="center" prop="doctorCode" />
<el-table-column label="科室编码" align="center" prop="departCode" />
<el-table-column label="手机号码" align="center" width="110px" prop="mobile" />
<el-table-column label="号票编号" align="center" :show-overflow-tooltip="true" prop="ticketNo" />
<el-table-column label="取号确认订单ID" align="center" :show-overflow-tooltip="true" prop="orderNo" />
<el-table-column label="取号确认时间段" align="center" prop="timeInterval" />
<el-table-column label="出诊日期" align="center" width="100px" prop="registerdate" />
<el-table-column label="诊查费" align="center" prop="clinicFee" />
<el-table-column label="挂号费" align="center" prop="registrationFee" />
<el-table-column label="收费性质" align="center" prop="payNature" />
<el-table-column label="支付方式" align="center" prop="payType" />
<el-table-column label="交易 ID" align="center" :show-overflow-tooltip="true" prop="powerTranID" />
<el-table-column label="提交时间" align="center" prop="ctime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.ctime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
</div>
</template>
<script>
import { createReserve8, updateReserve8, deleteReserve8, getReserve8, getReserve8Page, exportReserve8Excel } from "@/api/system/reserve8";
export default {
name: "Reserve8",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 预约挂号列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
userId: null,
cardId: null,
name: null,
ksmc: null,
ysmc: null,
subHospitalID: null,
reptNum: null,
lockType: null,
hisOrderNO: null,
scheduleId: null,
doctorCode: null,
departCode: null,
parTimeId: null,
lockTime: [],
patientId: null,
mobile: null,
serialNo: null,
location: null,
ticketNo: null,
orderNo: null,
timeInterval: null,
registerdate: [],
clinicFee: null,
registrationFee: null,
payNature: null,
payType: null,
powerTranID: null,
powerTranCARD: null,
terminalId: null,
zFAmount: null,
yBZHAmount: null,
yBTCAmount: null,
yBOutMsg: null,
hisOperNum: null,
referNo: null,
token: null,
appFlag: null,
appStatus: null,
appType: null,
ctime: [],
utime: [],
startDate: null,
endDate: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
const end = new Date();//获取当前的日期
this.queryParams.startDate=this.dateFormat(end);
this.queryParams.endDate=this.dateFormat(end);
this.getList();
},
methods: {
dateFormat(dateData) {
var date = new Date(dateData)
var y = date.getFullYear()
var m = date.getMonth() + 1
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
const time = y + '-' + m + '-' + d;
return time;
},
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getReserve8Page(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
userId: undefined,
cardId: undefined,
name: undefined,
ksmc: undefined,
ysmc: undefined,
subHospitalID: undefined,
reptNum: undefined,
lockType: undefined,
hisOrderNO: undefined,
scheduleId: undefined,
doctorCode: undefined,
departCode: undefined,
parTimeId: undefined,
lockTime: undefined,
patientId: undefined,
mobile: undefined,
serialNo: undefined,
location: undefined,
ticketNo: undefined,
orderNo: undefined,
timeInterval: undefined,
registerdate: undefined,
clinicFee: undefined,
registrationFee: undefined,
payNature: undefined,
payType: undefined,
powerTranID: undefined,
powerTranCARD: undefined,
terminalId: undefined,
zFAmount: undefined,
yBZHAmount: undefined,
yBTCAmount: undefined,
yBOutMsg: undefined,
hisOperNum: undefined,
referNo: undefined,
token: undefined,
appFlag: undefined,
appStatus: undefined,
appType: undefined,
ctime: undefined,
utime: undefined,
// startDate: null,
// endDate: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加预约挂号";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getReserve8(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改预约挂号";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateReserve8(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createReserve8(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除预约挂号编号为"' + id + '"的数据项?').then(function() {
return deleteReserve8(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有预约挂号数据项?').then(() => {
this.exportLoading = true;
return exportReserve8Excel(params);
}).then(response => {
this.$download.excel(response, '预约挂号.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,496 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
<el-form-item label="角色名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入角色名称" clearable size="small" style="width: 240px"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="角色标识" prop="code">
<el-input v-model="queryParams.code" placeholder="请输入角色标识" clearable size="small" style="width: 240px"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="角色状态" clearable size="small" style="width: 240px">
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:role:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:role:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="roleList">
<el-table-column label="角色编号" prop="id" width="120" />
<el-table-column label="角色名称" prop="name" :show-overflow-tooltip="true" width="150" />
<el-table-column label="角色标识" prop="code" :show-overflow-tooltip="true" width="150" />
<el-table-column label="角色类型" prop="type" width="80">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_ROLE_TYPE" :value="scope.row.type"/>
</template>
</el-table-column>
<el-table-column label="显示顺序" prop="sort" width="100" />
<el-table-column label="状态" align="center" width="100">
<template slot-scope="scope">
<el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:role:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-circle-check" @click="handleMenu(scope.row)"
v-hasPermi="['system:permission:assign-role-menu']">菜单权限</el-button>
<el-button size="mini" type="text" icon="el-icon-circle-check" @click="handleDataScope(scope.row)"
v-hasPermi="['system:permission:assign-role-data-scope']">数据权限</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:role:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 添加或修改角色配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="角色名称" prop="name">
<el-input v-model="form.name" placeholder="请输入角色名称" />
</el-form-item>
<el-form-item label="角色标识" prop="code">
<el-input v-model="form.code" placeholder="请输入角色标识" />
</el-form-item>
<el-form-item label="角色顺序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 分配角色的数据权限对话框 -->
<el-dialog title="分配数据权限" :visible.sync="openDataScope" width="500px" append-to-body>
<el-form :model="form" label-width="80px">
<el-form-item label="角色名称">
<el-input v-model="form.name" :disabled="true" />
</el-form-item>
<el-form-item label="角色标识">
<el-input v-model="form.code" :disabled="true" />
</el-form-item>
<el-form-item label="权限范围">
<el-select v-model="form.dataScope">
<el-option
v-for="item in dataScopeDictDatas"
:key="parseInt(item.value)"
:label="item.label"
:value="parseInt(item.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据权限" v-show="form.dataScope === SysDataScopeEnum.DEPT_CUSTOM">
<el-checkbox :checked="!form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动(选中父节点自动选择子节点)</el-checkbox>
<el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>
<el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>
<el-tree
class="tree-border"
:data="deptOptions"
show-checkbox
default-expand-all
ref="dept"
node-key="id"
:check-strictly="form.deptCheckStrictly"
empty-text="加载中请稍后"
:props="defaultProps"
></el-tree>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitDataScope"> </el-button>
<el-button @click="cancelDataScope"> </el-button>
</div>
</el-dialog>
<!-- 分配角色的菜单权限对话框 -->
<el-dialog :title="title" :visible.sync="openMenu" width="500px" append-to-body>
<el-form :model="form" label-width="80px">
<el-form-item label="角色名称">
<el-input v-model="form.name" :disabled="true" />
</el-form-item>
<el-form-item label="角色标识">
<el-input v-model="form.code" :disabled="true" />
</el-form-item>
<el-form-item label="菜单权限">
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
<el-tree class="tree-border" :data="menuOptions" show-checkbox ref="menu" node-key="id"
:check-strictly="form.menuCheckStrictly" empty-text="加载中请稍后" :props="defaultProps"></el-tree>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitMenu"> </el-button>
<el-button @click="cancelMenu"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
addRole,
changeRoleStatus,
dataScope,
delRole,
exportRole,
getRole,
listRole,
updateRole
} from "@/api/system/role";
import {listSimpleMenus} from "@/api/system/menu";
import {assignRoleMenu, listRoleMenus, assignRoleDataScope} from "@/api/system/permission";
import {listSimpleDepts} from "@/api/system/dept";
import {CommonStatusEnum, SystemDataScopeEnum} from "@/utils/constants";
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
export default {
name: "Role",
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 角色表格数据
roleList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 是否显示弹出层(数据权限)
openDataScope: false,
// 是否显示弹出层(菜单权限)
openMenu: false,
menuExpand: false,
menuNodeAll: false,
deptExpand: true,
deptNodeAll: false,
// 菜单列表
menuOptions: [],
// 部门列表
deptOptions: [], // 部门属性结构
depts: [], // 部门列表
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: undefined,
code: undefined,
status: undefined,
createTime: []
},
// 表单参数
form: {},
defaultProps: {
label: "name",
children: "children"
},
// 表单校验
rules: {
name: [
{ required: true, message: "角色名称不能为空", trigger: "blur" }
],
code: [
{ required: true, message: "角色标识不能为空", trigger: "blur" }
],
sort: [
{ required: true, message: "角色顺序不能为空", trigger: "blur" }
]
},
// 枚举
SysCommonStatusEnum: CommonStatusEnum,
SysDataScopeEnum: SystemDataScopeEnum,
// 数据字典
roleTypeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_ROLE_TYPE),
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
dataScopeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_DATA_SCOPE)
};
},
created() {
this.getList();
},
methods: {
/** 查询角色列表 */
getList() {
this.loading = true;
listRole(this.queryParams).then(
response => {
this.roleList = response.data.list;
this.total = response.data.total;
this.loading = false;
}
);
},
// 角色状态修改
handleStatusChange(row) {
// 此时row 已经变成目标状态了,所以可以直接提交请求和提示
let text = row.status === CommonStatusEnum.ENABLE ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + '""' + row.name + '"角色吗?').then(function() {
return changeRoleStatus(row.id, row.status);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function() {
// 异常时,需要将 row.status 状态重置回之前的
row.status = row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE
: CommonStatusEnum.ENABLE;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 取消按钮(数据权限)
cancelDataScope() {
this.openDataScope = false;
this.reset();
},
// 取消按钮(菜单权限)
cancelMenu() {
this.openMenu = false;
this.reset();
},
// 表单重置
reset() {
if (this.$refs.menu !== undefined) {
this.$refs.menu.setCheckedKeys([]);
}
this.menuExpand = false;
this.menuNodeAll = false;
this.deptExpand = true;
this.deptNodeAll = false;
this.form = {
id: undefined,
name: undefined,
code: undefined,
sort: 0,
deptIds: [],
menuIds: [],
dataScope: undefined,
deptCheckStrictly: false,
menuCheckStrictly: true,
remark: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 树权限(展开/折叠)
handleCheckedTreeExpand(value, type) {
if (type === 'menu') {
let treeList = this.menuOptions;
for (let i = 0; i < treeList.length; i++) {
this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
}
} else if (type === 'dept') {
let treeList = this.deptOptions;
for (let i = 0; i < treeList.length; i++) {
this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
}
}
},
// 树权限(全选/全不选)
handleCheckedTreeNodeAll(value, type) {
if (type === 'menu') {
this.$refs.menu.setCheckedNodes(value ? this.menuOptions: []);
} else if (type === 'dept') {
// this.$refs.dept.setCheckedNodes(value ? this.deptOptions: []);
this.$refs.dept.setCheckedNodes(value ? this.depts: []);
}
},
// 树权限(父子联动)
handleCheckedTreeConnect(value, type) {
if (type === 'menu') {
this.form.menuCheckStrictly = value;
} else if (type === 'dept') {
this.form.deptCheckStrictly = !value;
}
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加角色";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id
getRole(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改角色";
});
},
/** 分配菜单权限操作 */
handleMenu(row) {
this.reset();
const id = row.id
// 处理了 form 的角色 name 和 code 的展示
this.form.id = id;
this.form.name = row.name;
this.form.code = row.code;
// 打开弹窗
this.openMenu = true;
// 获得菜单列表
listSimpleMenus().then(response => {
// 处理 menuOptions 参数
this.menuOptions = [];
this.menuOptions.push(...this.handleTree(response.data, "id"));
// 获取角色拥有的菜单权限
listRoleMenus(id).then(response => {
// 设置为严格,避免设置父节点自动选中子节点,解决半选中问题
this.form.menuCheckStrictly = true
// 设置选中
this.$refs.menu.setCheckedKeys(response.data);
// 设置为非严格,继续使用半选中
this.form.menuCheckStrictly = false
})
});
},
/** 分配数据权限操作 */
handleDataScope(row) {
this.reset();
// 处理了 form 的角色 name 和 code 的展示
this.form.id = row.id;
this.form.name = row.name;
this.form.code = row.code;
// 打开弹窗
this.openDataScope = true;
// 获得部门列表
listSimpleDepts().then(response => {
// 处理 deptOptions 参数
this.deptOptions = [];
this.deptOptions.push(...this.handleTree(response.data, "id"));
this.depts = response.data;
// this.deptIds = response.data.map(x => x.id);
// 获得角色拥有的数据权限
getRole(row.id).then(response => {
this.form.dataScope = response.data.dataScope;
this.$refs.dept.setCheckedKeys(response.data.dataScopeDeptIds, false);
});
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updateRole(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addRole(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 提交按钮(数据权限) */
submitDataScope: function() {
if (this.form.id !== undefined) {
assignRoleDataScope({
roleId: this.form.id,
dataScope: this.form.dataScope,
dataScopeDeptIds: this.form.dataScope !== SystemDataScopeEnum.DEPT_CUSTOM ? [] :
this.$refs.dept.getCheckedKeys()
}).then(response => {
this.$modal.msgSuccess("修改成功");
this.openDataScope = false;
this.getList();
});
}
},
/** 提交按钮(菜单权限) */
submitMenu: function() {
if (this.form.id !== undefined) {
assignRoleMenu({
roleId: this.form.id,
menuIds: [...this.$refs.menu.getCheckedKeys(), ...this.$refs.menu.getHalfCheckedKeys()]
}).then(response => {
this.$modal.msgSuccess("修改成功");
this.openMenu = false;
this.getList();
});
}
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除角色编号为"' + ids + '"的数据项?').then(function() {
return delRole(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有角色数据项?').then(function() {
this.exportLoading = true;
return exportRole(queryParams);
}).then(response => {
this.$download.excel(response, '角色数据.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,330 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入敏感词" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="标签" prop="tag">
<el-select v-model="queryParams.tag" placeholder="请选择标签" clearable @keyup.enter.native="handleQuery">
<el-option v-for="tag in tags" :key="tag" :label="tag" :value="tag"/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择启用状态" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:sensitive-word:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
:loading="exportLoading" v-hasPermi="['system:sensitive-word:export']">导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-document-checked" size="mini" @click="handleTest">测试</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id"/>
<el-table-column label="敏感词" align="center" prop="name"/>
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="描述" align="center" prop="description"/>
<el-table-column label="标签" align="center" prop="tags">
<template slot-scope="scope">
<el-tag :disable-transitions="true" :key="index" v-for="(tag, index) in scope.row.tags" :index="index">
{{ tag }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</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:sensitive-word:update']">修改
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:sensitive-word:delete']">删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="敏感词" prop="name">
<el-input v-model="form.name" placeholder="请输入敏感词"/>
</el-form-item>
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="description">
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="标签" prop="tags">
<el-select v-model="form.tags" multiple filterable allow-create placeholder="请选择文章标签" style="width: 380px" >
<el-option v-for="tag in tags" :key="tag" :label="tag" :value="tag"/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 对话框(测试敏感词) -->
<el-dialog title="检测敏感词" :visible.sync="testOpen" width="500px" append-to-body>
<el-form ref="testForm" :model="testForm" :rules="testRules" label-width="80px">
<el-form-item label="文本" prop="text">
<el-input type="textarea" v-model="testForm.text" placeholder="请输入测试文本"/>
</el-form-item>
<el-form-item label="标签" prop="tags">
<el-select v-model="testForm.tags" multiple placeholder="请选择标签" style="width: 380px" >
<el-option v-for="tag in tags" :key="tag" :label="tag" :value="tag"/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitTestForm"> </el-button>
<el-button @click="cancelTest"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createSensitiveWord, updateSensitiveWord, deleteSensitiveWord, getSensitiveWord, getSensitiveWordPage,
exportSensitiveWordExcel, validateText, getSensitiveWordTags} from "@/api/system/sensitiveWord";
import {CommonStatusEnum} from "@/utils/constants";
export default {
name: "SensitiveWord",
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 敏感词列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
testOpen: false,
tags: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
tag: null,
createTime: []
},
// 表单参数
form: {},
// 表单参数
testForm: {},
// 表单校验
rules: {
name: [{required: true, message: "敏感词不能为空", trigger: "blur"}],
tags: [{required: true, message: "标签不能为空", trigger: "blur"}]
},
testRules: {
text: [{required: true, message: "测试文本不能为空", trigger: 'blur'}],
}
};
},
created() {
this.getTags();
this.getList();
},
methods: {
/** 初始化标签select*/
getTags(){
getSensitiveWordTags().then(response => {
this.tags = response.data;
});
},
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getSensitiveWordPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 取消按钮 */
cancelTest() {
this.resetTest();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
name: undefined,
description: undefined,
tags: undefined,
status: CommonStatusEnum.ENABLE
};
this.resetForm("form");
},
/** 表单重置 */
resetTest() {
this.testForm = {
text: undefined,
tags: undefined
};
this.resetForm("testForm");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加敏感词";
},
/** 测试敏感词按钮操作 */
handleTest() {
this.resetTest();
this.testOpen = true;
this.titleTest = "检测文本是否含有敏感词";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getSensitiveWord(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改敏感词";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateSensitiveWord(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).catch(err => {});
return;
}
// 添加的提交
createSensitiveWord(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).catch(err => {});
});
},
/** 测试文本2提交按钮 */
submitTestForm() {
this.$refs["testForm"].validate(valid => {
if (!valid) {
return;
}
validateText(this.testForm).then(response => {
if (response.data.length === 0) {
this.$modal.msgSuccess("不包含敏感词!");
return;
}
this.$modal.msgWarning("包含敏感词:" + response.data.join(', '));
})
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除敏感词编号为"' + id + '"的数据项?').then(function () {
return deleteSensitiveWord(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
// 执行导出
this.$modal.confirm('是否确认导出所有敏感词数据项?').then(() => {
this.exportLoading = true;
return exportSensitiveWordExcel(params);
}).then(response => {
this.$download.excel(response, '${table.classComment}.xls');
this.exportLoading = false;
}).catch(() => {
});
},
}
};
</script>
<style rel="stylesheet/scss" lang="scss">
.el-tag+.el-tag {
margin-left: 10px;
}
</style>

View File

@@ -0,0 +1,243 @@
<template>
<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="signature">
<el-input v-model="queryParams.signature" placeholder="请输入短信签名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="启用状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择启用状态" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:sms-channel:create']">新增</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="短信签名" align="center" prop="signature" />
<el-table-column label="渠道编码" align="center" prop="code">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE" :value="scope.row.code"/>
</template>
</el-table-column>
<el-table-column label="启用状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="短信 API 的账号" align="center" prop="apiKey" />
<el-table-column label="短信 API 的密钥" align="center" prop="apiSecret" />
<el-table-column label="短信发送回调 URL" align="center" prop="callbackUrl" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:sms-channel:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:sms-channel:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="130px">
<el-form-item label="短信签名" prop="signature">
<el-input v-model="form.signature" placeholder="请输入短信签名" />
</el-form-item>
<el-form-item label="渠道编码" prop="code">
<el-select v-model="form.code" placeholder="请选择渠道编码" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="启用状态">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="短信 API 的账号" prop="apiKey">
<el-input v-model="form.apiKey" placeholder="请输入短信 API 的账号" />
</el-form-item>
<el-form-item label="短信 API 的密钥" prop="apiSecret">
<el-input v-model="form.apiSecret" placeholder="请输入短信 API 的密钥" />
</el-form-item>
<el-form-item label="短信发送回调 URL" prop="callbackUrl">
<el-input v-model="form.callbackUrl" placeholder="请输入短信发送回调 URL" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createSmsChannel, updateSmsChannel, deleteSmsChannel, getSmsChannel, getSmsChannelPage,
getSimpleSmsChannels } from "@/api/system/sms/smsChannel";
export default {
name: "SmsChannel",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 短信渠道列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
signature: null,
status: null,
createTime: []
},
// 表单参数
form: {},
// 表单校验
rules: {
signature: [{ required: true, message: "短信签名不能为空", trigger: "blur" }],
code: [{ required: true, message: "渠道编码不能为空", trigger: "blur" }],
status: [{ required: true, message: "启用状态不能为空", trigger: "blur" }],
apiKey: [{ required: true, message: "短信 API 的账号不能为空", trigger: "blur" }],
},
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getSmsChannelPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
signature: undefined,
code: undefined,
status: undefined,
remark: undefined,
apiKey: undefined,
apiSecret: undefined,
callbackUrl: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加短信渠道";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getSmsChannel(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改短信渠道";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateSmsChannel(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createSmsChannel(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除短信渠道编号为"' + row.id + '"的数据项?').then(function() {
return deleteSmsChannel(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,293 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="手机号" prop="mobile">
<el-input v-model="queryParams.mobile" placeholder="请输入手机号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="短信渠道" prop="channelId">
<el-select v-model="queryParams.channelId" placeholder="请选择短信渠道" clearable>
<el-option v-for="channel in channelOptions"
:key="channel.id" :value="channel.id"
:label="channel.signature + '【' + getDictDataLabel(DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE, channel.code) + '】'" />
</el-select>
</el-form-item>
<el-form-item label="模板编号" prop="templateId">
<el-input v-model="queryParams.templateId" placeholder="请输入模板编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="发送状态" prop="sendStatus">
<el-select v-model="queryParams.sendStatus" placeholder="请选择发送状态" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_SMS_SEND_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="发送时间" prop="sendTime">
<el-date-picker v-model="queryParams.sendTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="接收状态" prop="receiveStatus">
<el-select v-model="queryParams.receiveStatus" placeholder="请选择接收状态" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_SMS_RECEIVE_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="接收时间" prop="receiveTime">
<el-date-picker v-model="queryParams.receiveTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:sms-log:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="手机号" align="center" prop="mobile" width="120">
<template slot-scope="scope">
<div>{{ scope.row.mobile }}</div>
<div v-if="scope.row.userType && scope.row.userId">
<dict-tag :type="DICT_TYPE.USER_TYPE" :value="scope.row.userType"/>{{ '(' + scope.row.userId + ')' }}
</div>
</template>
</el-table-column>
<el-table-column label="短信内容" align="center" prop="templateContent" width="300" />
<el-table-column label="发送状态" align="center" width="180">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_SEND_STATUS" :value="scope.row.sendStatus"/>
<div>{{ parseTime(scope.row.sendTime) }}</div>
</template>
</el-table-column>
<el-table-column label="接收状态" align="center" width="180">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_RECEIVE_STATUS" :value="scope.row.receiveStatus"/>
<div>{{ parseTime(scope.row.receiveTime) }}</div>
</template>
</el-table-column>
<el-table-column label="短信渠道" align="center" width="120">
<template slot-scope="scope">
<div>{{ formatChannelSignature(scope.row.channelId) }}</div>
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE" :value="scope.row.channelCode"/>
</template>
</el-table-column>
<el-table-column label="模板编号" align="center" prop="templateId" />
<el-table-column label="短信类型" align="center" prop="templateType">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE" :value="scope.row.templateType"/>
</template>
</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-view" @click="handleView(scope.row,scope.index)"
v-hasPermi="['system:sms-log:query']">详细</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 短信日志详细 -->
<el-dialog title="短信日志详细" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="140px" size="mini">
<el-row>
<el-col :span="24">
<el-form-item label="日志主键:">{{ form.id }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="短信渠道:">
{{formatChannelSignature(form.channelId) }}
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE" :value="form.channelCode"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="短信模板:">
{{ form.templateId }} | {{ form.templateCode }}
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE" :value="form.templateType"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="API 的模板编号:">{{ form.apiTemplateId }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="用户信息:">{{ form.mobile }}
<span v-if="form.userType && form.userId">
<dict-tag :type="DICT_TYPE.USER_TYPE" :value="form.userType"/>({{ form.userId }})
</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="短信内容:">{{ form.templateContent }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="短信参数:">{{ form.templateParams }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="创建时间:">{{ parseTime(form.createTime) }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="发送状态:">
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_SEND_STATUS" :value="form.sendStatus"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="发送时间:">{{ parseTime(form.sendTime) }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="发送结果:">{{ form.sendCode }} | {{ form.sendMsg }}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="API 发送结果:">{{ form.apiSendCode }} | {{ form.apiSendMsg }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="API 短信编号:">{{ form.apiSerialNo }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="API 请求编号:">{{ form.apiRequestId }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="接收状态:">
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_RECEIVE_STATUS" :value="form.receiveStatus"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="接收时间:">{{ parseTime(form.receiveTime) }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="API 接收结果:">{{ form.apiReceiveCode }} | {{ form.apiReceiveMsg }}
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getSmsLogPage, exportSmsLogExcel } from "@/api/system/sms/smsLog";
import { getSimpleSmsChannels } from "@/api/system/sms/smsChannel";
export default {
name: "SmsLog",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 短信日志列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 表单参数
form: {},
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
channelId: null,
templateId: null,
mobile: null,
sendStatus: null,
receiveStatus: null,
sendTime: [],
receiveTime: []
},
// 短信渠道
channelOptions: [],
};
},
created() {
this.getList();
// 获得短信渠道
getSimpleSmsChannels().then(response => {
this.channelOptions = response.data;
})
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getSmsLogPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
// 执行导出
this.$modal.confirm('是否确认导出所有短信日志数据项?').then(() => {
this.exportLoading = true;
return exportSmsLogExcel(params);
}).then(response => {
this.$download.excel(response, '短信日志.xls');
this.exportLoading = false;
}).catch(() => {});
},
/** 详细按钮操作 */
handleView(row) {
this.open = true;
this.form = row;
},
/** 格式化短信渠道 */
formatChannelSignature(channelId) {
for (const channel of this.channelOptions) {
if (channel.id === channelId) {
return channel.signature;
}
}
return '找不到签名:' + channelId;
}
}
};
</script>

View File

@@ -0,0 +1,396 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="150px">
<el-form-item label="短信类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择短信类型" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="开启状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择开启状态" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="模板编码" prop="code">
<el-input v-model="queryParams.code" placeholder="请输入模板编码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="短信 API 的模板编号" prop="apiTemplateId">
<el-input v-model="queryParams.apiTemplateId" placeholder="请输入短信 API 的模板编号" clearable size="small" @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="短信渠道" prop="channelId">
<el-select v-model="queryParams.channelId" placeholder="请选择短信渠道" clearable>
<el-option v-for="channel in channelOptions"
:key="channel.id" :value="channel.id"
:label="channel.signature + '【' + getDictDataLabel(DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE, channel.code) + '】'" />
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:sms-template:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:sms-template:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="模板编码" align="center" prop="code" />
<el-table-column label="模板名称" align="center" prop="name" />
<el-table-column label="模板内容" align="center" prop="content" width="300" />
<el-table-column label="短信类型" align="center" prop="type">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE" :value="scope.row.type"/>
</template>
</el-table-column>
<el-table-column label="开启状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="短信 API 的模板编号" align="center" prop="apiTemplateId" width="180" />
<el-table-column label="短信渠道" align="center" width="120">
<template slot-scope="scope">
<div>{{ formatChannelSignature(scope.row.channelId) }}</div>
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE" :value="scope.row.channelCode"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-share" @click="handleSendSms(scope.row)"
v-hasPermi="['system:sms-template:send-sms']">测试</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:sms-template:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:sms-template:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="140px">
<el-form-item label="短信渠道编号" prop="channelId">
<el-select v-model="form.channelId" placeholder="请选择短信渠道编号">
<el-option v-for="channel in channelOptions"
:key="channel.id" :value="channel.id"
:label="channel.signature + '【' + getDictDataLabel(DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE, channel.code) + '】'" />
</el-select>
</el-form-item>
<el-form-item label="短信类型" prop="type">
<el-select v-model="form.type" placeholder="请选择短信类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
<el-form-item label="模板编号" prop="code">
<el-input v-model="form.code" placeholder="请输入模板编号" />
</el-form-item>
<el-form-item label="模板名称" prop="name">
<el-input v-model="form.name" placeholder="请输入模板名称" />
</el-form-item>
<el-form-item label="模板内容" prop="content">
<el-input type="textarea" v-model="form.content" placeholder="请输入模板内容" />
</el-form-item>
<el-form-item label="开启状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="短信 API 模板编号" prop="apiTemplateId">
<el-input v-model="form.apiTemplateId" placeholder="请输入短信 API 的模板编号" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 对话框(发送短信) -->
<el-dialog title="测试发送短信" :visible.sync="sendSmsOpen" width="500px" append-to-body>
<el-form ref="sendSmsForm" :model="sendSmsForm" :rules="sendSmsRules" label-width="140px">
<el-form-item label="模板内容" prop="content">
<el-input v-model="sendSmsForm.content" type="textarea" placeholder="请输入模板内容" readonly />
</el-form-item>
<el-form-item label="手机号" prop="mobile">
<el-input v-model="sendSmsForm.mobile" placeholder="请输入手机号" />
</el-form-item>
<el-form-item v-for="param in sendSmsForm.params" :key="param" :label="'参数 {' + param + '}'" :prop="'templateParams.' + param">
<el-input v-model="sendSmsForm.templateParams[param]" :placeholder="'请输入 ' + param + ' 参数'" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitSendSmsForm"> </el-button>
<el-button @click="cancelSendSms"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createSmsTemplate, updateSmsTemplate, deleteSmsTemplate, getSmsTemplate, getSmsTemplatePage,
exportSmsTemplateExcel, sendSms } from "@/api/system/sms/smsTemplate";
import { getSimpleSmsChannels } from "@/api/system/sms/smsChannel";
export default {
name: "SmsTemplate",
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 短信模板列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
type: null,
status: null,
code: null,
content: null,
apiTemplateId: null,
channelId: null,
createTime: []
},
// 表单参数
form: {},
// 表单校验
rules: {
type: [{ required: true, message: "短信类型不能为空", trigger: "change" }],
status: [{ required: true, message: "开启状态不能为空", trigger: "blur" }],
code: [{ required: true, message: "模板编码不能为空", trigger: "blur" }],
name: [{ required: true, message: "模板名称不能为空", trigger: "blur" }],
content: [{ required: true, message: "模板内容不能为空", trigger: "blur" }],
apiTemplateId: [{ required: true, message: "短信 API 的模板编号不能为空", trigger: "blur" }],
channelId: [{ required: true, message: "短信渠道编号不能为空", trigger: "change" }],
},
// 短信渠道
channelOptions: [],
// 发送短信
sendSmsOpen: false,
sendSmsForm: {
params: [], // 模板的参数列表
},
sendSmsRules: {
mobile: [{ required: true, message: "手机不能为空", trigger: "blur" }],
templateCode: [{ required: true, message: "手机不能为空", trigger: "blur" }],
templateParams: { }
}
};
},
created() {
this.getList();
// 获得短信渠道
getSimpleSmsChannels().then(response => {
this.channelOptions = response.data;
})
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getSmsTemplatePage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
type: undefined,
status: undefined,
code: undefined,
name: undefined,
content: undefined,
remark: undefined,
apiTemplateId: undefined,
channelId: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加短信模板";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getSmsTemplate(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改短信模板";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateSmsTemplate(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createSmsTemplate(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除短信模板编号为"' + id + '"的数据项?').then(function() {
return deleteSmsTemplate(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
// 执行导出
this.$modal.confirm('是否确认导出所有短信模板数据项?', "警告").then(() => {
this.exportLoading = true;
return exportSmsTemplateExcel(params);
}).then(response => {
this.$download.excel(response, '短信模板.xls');
this.exportLoading = false;
}).catch(() => {});
},
/** 发送短息按钮 */
handleSendSms(row) {
this.resetSendSms(row);
// 设置参数
this.sendSmsForm.content = row.content;
this.sendSmsForm.params = row.params;
this.sendSmsForm.templateCode = row.code;
this.sendSmsForm.templateParams = row.params.reduce(function(obj, item) {
obj[item] = undefined;
return obj;
}, {});
// 根据 row 重置 rules
this.sendSmsRules.templateParams = row.params.reduce(function(obj, item) {
obj[item] = { required: true, message: '参数 ' + item + " 不能为空", trigger: "change" };
return obj;
}, {});
// 设置打开
this.sendSmsOpen = true;
},
/** 重置发送短信的表单 */
resetSendSms() {
// 根据 row 重置表单
this.sendSmsForm = {
content: undefined,
params: undefined,
mobile: undefined,
templateCode: undefined,
templateParams: {}
};
this.resetForm("sendSmsForm");
},
/** 取消发送短信 */
cancelSendSms() {
this.sendSmsOpen = false;
this.resetSendSms();
},
/** 提交按钮 */
submitSendSmsForm() {
this.$refs["sendSmsForm"].validate(valid => {
if (!valid) {
return;
}
// 添加的提交
sendSms(this.sendSmsForm).then(response => {
this.$modal.msgSuccess("提交发送成功!发送结果,见发送日志编号:" + response.data);
this.sendSmsOpen = false;
});
});
},
/** 格式化短信渠道 */
formatChannelSignature(channelId) {
for (const channel of this.channelOptions) {
if (channel.id === channelId) {
return channel.signature;
}
}
return '找不到签名:' + channelId;
}
}
};
</script>

View File

@@ -0,0 +1,312 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入租户名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="联系人" prop="contactName">
<el-input v-model="queryParams.contactName" placeholder="请输入联系人" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="联系手机" prop="contactMobile">
<el-input v-model="queryParams.contactMobile" placeholder="请输入联系手机" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="租户状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择租户状态" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:tenant:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:tenant:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="租户编号" align="center" prop="id" />
<el-table-column label="租户名" align="center" prop="name" />
<el-table-column label="租户套餐" align="center" prop="packageId">
<template slot-scope="scope">
<el-tag v-if="scope.row.packageId === 0" type="danger">系统租户</el-tag>
<el-tag v-else> {{getPackageName(scope.row.packageId)}} </el-tag>
</template>
</el-table-column>
<el-table-column label="联系人" align="center" prop="contactName" />
<el-table-column label="联系手机" align="center" prop="contactMobile" />
<el-table-column label="账号额度" align="center" prop="accountCount">
<template slot-scope="scope">
<el-tag> {{scope.row.accountCount}} </el-tag>
</template>
</el-table-column>
<el-table-column label="过期时间" align="center" prop="expireTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.expireTime) }}</span>
</template>
</el-table-column>
<el-table-column label="绑定域名" align="center" prop="domain" width="180" />
<el-table-column label="租户状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:tenant:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:tenant:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="租户名" prop="name">
<el-input v-model="form.name" placeholder="请输入租户名" />
</el-form-item>
<el-form-item label="租户套餐" prop="packageId">
<el-select v-model="form.packageId" placeholder="请选择租户套餐" clearable size="small">
<el-option v-for="item in packageList" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item label="联系人" prop="contactName">
<el-input v-model="form.contactName" placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="联系手机" prop="contactMobile">
<el-input v-model="form.contactMobile" placeholder="请输入联系手机" />
</el-form-item>
<el-form-item v-if="form.id === undefined" label="用户名称" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名称" />
</el-form-item>
<el-form-item v-if="form.id === undefined" label="用户密码" prop="password">
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" show-password />
</el-form-item>
<el-form-item label="账号额度" prop="accountCount">
<el-input-number v-model="form.accountCount" placeholder="请输入账号额度" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="过期时间" prop="expireTime">
<el-date-picker clearable size="small" v-model="form.expireTime" type="date"
value-format="timestamp" placeholder="请选择过期时间" />
</el-form-item>
<el-form-item label="绑定域名" prop="domain">
<el-input v-model="form.domain" placeholder="请输入绑定域名" />
</el-form-item>
<el-form-item label="租户状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createTenant, updateTenant, deleteTenant, getTenant, getTenantPage, exportTenantExcel } from "@/api/system/tenant";
import { CommonStatusEnum } from '@/utils/constants'
import {getTenantPackageList} from "@/api/system/tenantPackage";
export default {
name: "Tenant",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 租户列表
list: [],
// 租户套餐列表
packageList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
contactName: null,
contactMobile: null,
status: undefined,
createTime: []
},
// 表单参数
form: {},
// 表单校验
rules: {
name: [{ required: true, message: "租户名不能为空", trigger: "blur" }],
packageId: [{ required: true, message: "租户套餐不能为空", trigger: "blur" }],
contactName: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
status: [{ required: true, message: "租户状态不能为空", trigger: "blur" }],
accountCount: [{ required: true, message: "账号额度不能为空", trigger: "blur" }],
expireTime: [{ required: true, message: "过期时间不能为空", trigger: "blur" }],
domain: [{ required: true, message: "绑定域名不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
// 获得租户套餐列表
getTenantPackageList().then(response => {
this.packageList = response.data;
})
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getTenantPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
name: undefined,
packageId: undefined,
contactName: undefined,
contactMobile: undefined,
accountCount: undefined,
expireTime: undefined,
domain: undefined,
status: CommonStatusEnum.ENABLE,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加租户";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getTenant(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改租户";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateTenant(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createTenant(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除租户编号为"' + id + '"的数据项?').then(function() {
return deleteTenant(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
// 执行导出
this.$modal.confirm('是否确认导出所有租户数据项?').then(() => {
this.exportLoading = true;
return exportTenantExcel(params);
}).then(response => {
this.$download.excel(response, '租户.xls');
this.exportLoading = false;
}).catch(() => {});
},
/** 套餐名格式化 */
getPackageName(packageId) {
for (const item of this.packageList) {
if (item.id === packageId) {
return item.name;
}
}
return '未知套餐';
}
}
};
</script>

View File

@@ -0,0 +1,285 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入套餐名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:tenant-package:create']">新增</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="套餐编号" align="center" prop="id" width="120" />
<el-table-column label="套餐名" align="center" prop="name" />
<el-table-column label="状态" align="center" prop="status" width="100">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:tenant-package:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:tenant-package:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="套餐名" prop="name">
<el-input v-model="form.name" placeholder="请输入套餐名" />
</el-form-item>
<el-form-item label="菜单权限">
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event)">展开/折叠</el-checkbox>
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event)">全选/全不选</el-checkbox>
<el-tree class="tree-border" :data="menuOptions" show-checkbox ref="menu" node-key="id"
:check-strictly="menuCheckStrictly" empty-text="加载中请稍后" :props="defaultProps"></el-tree>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createTenantPackage, updateTenantPackage, deleteTenantPackage, getTenantPackage, getTenantPackagePage} from "@/api/system/tenantPackage";
import {CommonStatusEnum, SystemMenuTypeEnum} from "@/utils/constants";
import {listSimpleMenus} from "@/api/system/menu";
export default {
name: "TenantPackage",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 租户套餐列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
name: null,
status: null,
remark: null,
createTime: []
},
// 表单参数
form: {},
menuExpand: false,
menuNodeAll: false,
menuCheckStrictly: true,
defaultProps: {
label: "name",
children: "children"
},
menuOptions: [], // 菜单列表
// 表单校验
rules: {
name: [{ required: true, message: "套餐名不能为空", trigger: "blur" }],
status: [{ required: true, message: "状态不能为空", trigger: "blur" }],
menuIds: [{ required: true, message: "关联的菜单编号不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
this.getMenus();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getTenantPackagePage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
// 菜单选择重置
if (this.$refs.menu !== undefined) {
this.$refs.menu.setCheckedKeys([]);
}
this.menuExpand = false;
this.menuNodeAll = false;
this.menuCheckStrictly = true;
// 表单重置
this.form = {
id: undefined,
name: undefined,
status: CommonStatusEnum.ENABLE,
remark: undefined,
menuIds: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
// 表单重置
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加租户套餐";
// 设置为非严格,继续使用半选中
this.menuCheckStrictly = false;
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
this.open = true;
this.title = "修改租户套餐";
// 获得菜单列表
getTenantPackage(id).then(response => {
this.form = response.data;
// 设置菜单项
// 设置为严格,避免设置父节点自动选中子节点,解决半选中问题
this.menuCheckStrictly = true
// 设置选中
this.$refs.menu.setCheckedKeys(response.data.menuIds);
// 设置为非严格,继续使用半选中
this.menuCheckStrictly = false
});
},
/** 获得菜单 */
getMenus() {
listSimpleMenus().then(response => {
// 处理 menuOptions 参数
this.menuOptions = [];
// 只需要配置
this.menuOptions.push(...this.handleTree(response.data, "id"));
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateTenantPackage({
...this.form,
menuIds: [...this.$refs.menu.getCheckedKeys(), ...this.$refs.menu.getHalfCheckedKeys()]
}).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createTenantPackage({
...this.form,
menuIds: [...this.$refs.menu.getCheckedKeys(), ...this.$refs.menu.getHalfCheckedKeys()]
}).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除租户套餐编号为"' + id + '"的数据项?').then(function() {
return deleteTenantPackage(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
// 树权限(展开/折叠)
handleCheckedTreeExpand(value, type) {
let treeList = this.menuOptions;
for (let i = 0; i < treeList.length; i++) {
this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
}
},
// 树权限(全选/全不选)
handleCheckedTreeNodeAll(value) {
this.$refs.menu.setCheckedNodes(value ? this.menuOptions: []);
},
// 树权限(父子联动)
handleCheckedTreeConnect(value) {
this.form.menuCheckStrictly = value;
},
}
};
</script>

View File

@@ -0,0 +1,642 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-row :gutter="20">
<!--部门数据-->
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input v-model="deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px"/>
</div>
<div class="head-container">
<el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode"
ref="tree" default-expand-all highlight-current @node-click="handleNodeClick"/>
</div>
</el-col>
<!--用户数据-->
<el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="78px">
<el-form-item label="用户名称" prop="username">
<el-input v-model="queryParams.username" placeholder="请输入用户名称" clearable style="width: 240px"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="手机号码" prop="mobile">
<el-input v-model="queryParams.mobile" placeholder="请输入手机号码" clearable style="width: 240px"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="用户状态" clearable style="width: 240px">
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:user:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" icon="el-icon-upload2" size="mini" @click="handleImport"
v-hasPermi="['system:user:import']">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:user:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="userList">
<el-table-column label="用户编号" align="center" key="id" prop="id" v-if="columns[0].visible" />
<el-table-column label="用户名称" align="center" key="username" prop="username" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickname" prop="nickname" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="部门" align="center" key="deptName" prop="dept.name" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="手机号码" align="center" key="mobile" prop="mobile" v-if="columns[4].visible" width="120" />
<el-table-column label="状态" key="status" v-if="columns[5].visible" align="center">
<template slot-scope="scope">
<el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="160" 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:user:update']">修改</el-button>
<el-dropdown @command="(command) => handleCommand(command, scope.$index, scope.row)"
v-hasPermi="['system:user:delete', 'system:user:update-password', 'system:permission:assign-user-role']">
<span class="el-dropdown-link">
<i class="el-icon-d-arrow-right el-icon--right"></i>更多
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleDelete" v-if="scope.row.id !== 1" size="mini" type="text" icon="el-icon-delete"
v-hasPermi="['system:user:delete']">删除</el-dropdown-item>
<el-dropdown-item command="handleResetPwd" size="mini" type="text" icon="el-icon-key"
v-hasPermi="['system:user:update-password']">重置密码</el-dropdown-item>
<el-dropdown-item command="handleRole" size="mini" type="text" icon="el-icon-circle-check"
v-hasPermi="['system:permission:assign-user-role']">分配角色</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
</el-col>
</el-row>
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="用户昵称" prop="nickname">
<el-input v-model="form.nickname" placeholder="请输入用户昵称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="归属部门" prop="deptId">
<treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" :clearable="false"
placeholder="请选择归属部门" :normalizer="normalizer"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="手机号码" prop="mobile">
<el-input v-model="form.mobile" placeholder="请输入手机号码" maxlength="11" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.id === undefined" label="用户名称" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.id === undefined" label="用户密码" prop="password">
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" show-password />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户性别">
<el-select v-model="form.sex" placeholder="请选择">
<el-option v-for="dict in sexDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="岗位">
<el-select v-model="form.postIds" multiple placeholder="请选择">
<el-option
v-for="item in postOptions"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div>
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
<!-- 分配角色 -->
<el-dialog title="分配角色" :visible.sync="openRole" width="500px" append-to-body>
<el-form :model="form" label-width="80px">
<el-form-item label="用户名称">
<el-input v-model="form.username" :disabled="true" />
</el-form-item>
<el-form-item label="用户昵称">
<el-input v-model="form.nickname" :disabled="true" />
</el-form-item>
<el-form-item label="角色">
<el-select v-model="form.roleIds" multiple placeholder="请选择">
<el-option
v-for="item in roleOptions"
:key="parseInt(item.id)"
:label="item.name"
:value="parseInt(item.id)"
></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitRole"> </el-button>
<el-button @click="cancelRole"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
addUser,
changeUserStatus,
delUser,
exportUser,
getUser,
importTemplate,
listUser,
resetUserPwd,
updateUser
} from "@/api/system/user";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import {listSimpleDepts} from "@/api/system/dept";
import {listSimplePosts} from "@/api/system/post";
import {CommonStatusEnum} from "@/utils/constants";
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import {assignUserRole, listUserRoles} from "@/api/system/permission";
import {listSimpleRoles} from "@/api/system/role";
import {getBaseHeader} from "@/utils/request";
export default {
name: "User",
components: { Treeselect },
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 用户表格数据
userList: null,
// 弹出层标题
title: "",
// 部门树选项
deptOptions: undefined,
// 是否显示弹出层
open: false,
// 部门名称
deptName: undefined,
// 默认密码
initPassword: undefined,
// 状态数据字典
statusOptions: [],
// 性别状态字典
sexOptions: [],
// 岗位选项
postOptions: [],
// 角色选项
roleOptions: [],
// 表单参数
form: {},
defaultProps: {
children: "children",
label: "name"
},
// 用户导入参数
upload: {
// 是否显示弹出层(用户导入)
open: false,
// 弹出层标题(用户导入)
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的用户数据
updateSupport: 0,
// 设置上传的请求头部
headers: getBaseHeader(),
// 上传的地址
url: process.env.VUE_APP_BASE_API + '/admin-api/system/user/import'
},
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
username: undefined,
mobile: undefined,
status: undefined,
deptId: undefined,
createTime: []
},
// 列信息
columns: [
{ key: 0, label: `用户编号`, visible: true },
{ key: 1, label: `用户名称`, visible: true },
{ key: 2, label: `用户昵称`, visible: true },
{ key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true },
{ key: 5, label: `状态`, visible: true },
{ key: 6, label: `创建时间`, visible: true }
],
// 表单校验
rules: {
username: [
{ required: true, message: "用户名称不能为空", trigger: "blur" }
],
nickname: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
],
password: [
{ required: true, message: "用户密码不能为空", trigger: "blur" }
],
email: [
{
type: "email",
message: "'请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
],
mobile: [
{
pattern: /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
},
// 是否显示弹出层(角色权限)
openRole: false,
// 枚举
SysCommonStatusEnum: CommonStatusEnum,
// 数据字典
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
sexDictDatas: getDictDatas(DICT_TYPE.SYSTEM_USER_SEX),
};
},
watch: {
// 根据名称筛选部门树
deptName(val) {
this.$refs.tree.filter(val);
}
},
created() {
this.getList();
this.getTreeselect();
this.getConfigKey("sys.user.init-password").then(response => {
this.initPassword = response.msg;
});
},
methods: {
// 更多操作
handleCommand(command, index, row) {
switch (command) {
case 'handleUpdate':
this.handleUpdate(row);//修改客户信息
break;
case 'handleDelete':
this.handleDelete(row);//红号变更
break;
case 'handleResetPwd':
this.handleResetPwd(row);
break;
case 'handleRole':
this.handleRole(row);
break;
default:
break;
}
},
/** 查询用户列表 */
getList() {
this.loading = true;
listUser(this.queryParams).then(response => {
this.userList = response.data.list;
this.total = response.data.total;
this.loading = false;
}
);
},
/** 查询部门下拉树结构 + 岗位下拉 */
getTreeselect() {
listSimpleDepts().then(response => {
// 处理 deptOptions 参数
this.deptOptions = [];
this.deptOptions.push(...this.handleTree(response.data, "id"));
});
listSimplePosts().then(response => {
// 处理 postOptions 参数
this.postOptions = [];
this.postOptions.push(...response.data);
});
},
// 筛选节点
filterNode(value, data) {
if (!value) return true;
return data.name.indexOf(value) !== -1;
},
// 节点单击事件
handleNodeClick(data) {
this.queryParams.deptId = data.id;
this.getList();
},
// 用户状态修改
handleStatusChange(row) {
let text = row.status === CommonStatusEnum.ENABLE ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + '""' + row.username + '"用户吗?').then(function() {
return changeUserStatus(row.id, row.status);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function() {
row.status = row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE
: CommonStatusEnum.ENABLE;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 取消按钮(角色权限)
cancelRole() {
this.openRole = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
deptId: undefined,
username: undefined,
nickname: undefined,
password: undefined,
mobile: undefined,
email: undefined,
sex: undefined,
status: "0",
remark: undefined,
postIds: [],
roleIds: []
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
// 获得下拉数据
this.getTreeselect();
// 打开表单,并设置初始化
this.open = true;
this.title = "添加用户";
this.form.password = this.initPassword;
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.getTreeselect();
const id = row.id;
getUser(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改用户";
this.form.password = "";
});
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.$prompt('请输入"' + row.username + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消"
}).then(({ value }) => {
resetUserPwd(row.id, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value);
});
}).catch(() => {});
},
/** 分配用户角色操作 */
handleRole(row) {
this.reset();
const id = row.id
// 处理了 form 的用户 username 和 nickname 的展示
this.form.id = id;
this.form.username = row.username;
this.form.nickname = row.nickname;
// 打开弹窗
this.openRole = true;
// 获得角色列表
listSimpleRoles().then(response => {
// 处理 roleOptions 参数
this.roleOptions = [];
this.roleOptions.push(...response.data);
});
// 获得角色拥有的菜单集合
listUserRoles(id).then(response => {
// 设置选中
this.form.roleIds = response.data;
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updateUser(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addUser(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 提交按钮(角色权限) */
submitRole: function() {
if (this.form.id !== undefined) {
assignUserRole({
userId: this.form.id,
roleIds: this.form.roleIds,
}).then(response => {
this.$modal.msgSuccess("分配角色成功");
this.openRole = false;
this.getList();
});
}
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除用户编号为"' + ids + '"的数据项?').then(function() {
return delUser(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.$modal.confirm('是否确认导出所有用户数据项?').then(() => {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.exportLoading = true;
return exportUser(params);
}).then(response => {
this.$download.excel(response, '用户数据.xls');
this.exportLoading = false;
}).catch(() => {});
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "用户导入";
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
importTemplate().then(response => {
this.$download.excel(response, '用户导入模板.xls');
});
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
if (response.code !== 0) {
this.$modal.msgError(response.msg)
return;
}
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
// 拼接提示语
let data = response.data;
let text = '创建成功数量:' + data.createUsernames.length;
for (const username of data.createUsernames) {
text += '<br />&nbsp;&nbsp;&nbsp;&nbsp;' + username;
}
text += '<br />更新成功数量:' + data.updateUsernames.length;
for (const username of data.updateUsernames) {
text += '<br />&nbsp;&nbsp;&nbsp;&nbsp;' + username;
}
text += '<br />更新失败数量:' + Object.keys(data.failureUsernames).length;
for (const username in data.failureUsernames) {
text += '<br />&nbsp;&nbsp;&nbsp;&nbsp;' + username + '' + data.failureUsernames[username];
}
this.$alert(text, "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
},
// 格式化部门的下拉框
normalizer(node) {
return {
id: node.id,
label: node.name,
children: node.children
}
}
}
};
</script>

View File

@@ -0,0 +1,100 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="6" :xs="24">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>个人信息</span>
</div>
<div>
<div class="text-center">
<userAvatar :user="user" />
</div>
<ul class="list-group list-group-striped">
<li class="list-group-item">
<svg-icon icon-class="user" />用户名称
<div class="pull-right">{{ user.username }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="phone" />手机号码
<div class="pull-right">{{ user.mobile }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="email" />用户邮箱
<div class="pull-right">{{ user.email }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="tree" />所属部门
<div class="pull-right" v-if="user.dept">{{ user.dept.name }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="tree" />所属岗位
<div class="pull-right" v-if="user.posts">{{ user.posts.map(post => post.name).join(',') }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="peoples" />所属角色
<div class="pull-right" v-if="user.roles">{{ user.roles.map(role => role.name).join(',') }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="date" />创建日期
<div class="pull-right">{{ parseTime(user.createTime) }}</div>
</li>
</ul>
</div>
</el-card>
</el-col>
<el-col :span="18" :xs="24">
<el-card>
<div slot="header" class="clearfix">
<span>基本资料</span>
</div>
<el-tabs v-model="activeTab">
<el-tab-pane label="基本资料" name="userinfo">
<userInfo :user="user" />
</el-tab-pane>
<el-tab-pane label="修改密码" name="resetPwd">
<resetPwd :user="user" />
</el-tab-pane>
<!-- <el-tab-pane label="社交信息" name="userSocial">
<userSocial :user="user" :getUser="getUser" :setActiveTab="setActiveTab" />
</el-tab-pane> -->
</el-tabs>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import userAvatar from "./userAvatar";
import userInfo from "./userInfo";
import resetPwd from "./resetPwd";
import userSocial from "./userSocial";
import { getUserProfile } from "@/api/system/user";
export default {
name: "Profile",
components: { userAvatar, userInfo, resetPwd, userSocial },
data() {
return {
user: {},
roleGroup: {},
postGroup: {},
activeTab: "userinfo"
};
},
created() {
this.getUser();
},
methods: {
getUser() {
getUserProfile().then(response => {
this.user = response.data;
});
},
setActiveTab(activeTab) {
this.activeTab = activeTab
}
}
};
</script>

View File

@@ -0,0 +1,71 @@
<template>
<el-form ref="form" :model="user" :rules="rules" label-width="80px">
<el-form-item label="旧密码" prop="oldPassword">
<el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password />
</el-form-item>
<el-form-item label="新密码" prop="newPassword">
<el-input v-model="user.newPassword" placeholder="请输入新密码" type="password" show-password />
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword">
<el-input v-model="user.confirmPassword" placeholder="请确认密码" type="password" show-password />
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" @click="submit">保存</el-button>
<el-button type="danger" size="mini" @click="close">关闭</el-button>
</el-form-item>
</el-form>
</template>
<script>
import { updateUserPwd } from "@/api/system/user";
export default {
data() {
const equalToPassword = (rule, value, callback) => {
if (this.user.newPassword !== value) {
callback(new Error("两次输入的密码不一致"));
} else {
callback();
}
};
return {
test: "1test",
user: {
oldPassword: undefined,
newPassword: undefined,
confirmPassword: undefined
},
// 表单校验
rules: {
oldPassword: [
{ required: true, message: "旧密码不能为空", trigger: "blur" }
],
newPassword: [
{ required: true, message: "新密码不能为空", trigger: "blur" },
{ min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }
],
confirmPassword: [
{ required: true, message: "确认密码不能为空", trigger: "blur" },
{ required: true, validator: equalToPassword, trigger: "blur" }
]
}
};
},
methods: {
submit() {
this.$refs["form"].validate(valid => {
if (valid) {
updateUserPwd(this.user.oldPassword, this.user.newPassword).then(
response => {
this.$modal.msgSuccess("修改成功");
}
);
}
});
},
close() {
this.$tab.closePage();
}
}
};
</script>

View File

@@ -0,0 +1,171 @@
<template>
<div>
<div class="user-info-head" @click="editCropper()"><img v-bind:src="options.img" title="点击上传头像" class="img-circle img-lg" /></div>
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened" @close="closeDialog()">
<el-row>
<el-col :xs="24" :md="12" :style="{height: '350px'}">
<vue-cropper
ref="cropper"
:img="options.img"
:info="true"
:autoCrop="options.autoCrop"
:autoCropWidth="options.autoCropWidth"
:autoCropHeight="options.autoCropHeight"
:fixedBox="options.fixedBox"
@realTime="realTime"
v-if="visible"
/>
</el-col>
<el-col :xs="24" :md="12" :style="{height: '350px'}">
<div class="avatar-upload-preview">
<img :src="previews.url" :style="previews.img" />
</div>
</el-col>
</el-row>
<br />
<el-row>
<el-col :lg="2" :md="2">
<el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload">
<el-button size="small">
选择
<i class="el-icon-upload el-icon--right"></i>
</el-button>
</el-upload>
</el-col>
<el-col :lg="{span: 1, offset: 2}" :md="2">
<el-button icon="el-icon-plus" size="small" @click="changeScale(1)"></el-button>
</el-col>
<el-col :lg="{span: 1, offset: 1}" :md="2">
<el-button icon="el-icon-minus" size="small" @click="changeScale(-1)"></el-button>
</el-col>
<el-col :lg="{span: 1, offset: 1}" :md="2">
<el-button icon="el-icon-refresh-left" size="small" @click="rotateLeft()"></el-button>
</el-col>
<el-col :lg="{span: 1, offset: 1}" :md="2">
<el-button icon="el-icon-refresh-right" size="small" @click="rotateRight()"></el-button>
</el-col>
<el-col :lg="{span: 2, offset: 6}" :md="2">
<el-button type="primary" size="small" @click="uploadImg()"> </el-button>
</el-col>
</el-row>
</el-dialog>
</div>
</template>
<script>
import store from "@/store";
import { VueCropper } from "vue-cropper";
import { uploadAvatar } from "@/api/system/user";
export default {
components: { VueCropper },
props: {
user: {
type: Object
}
},
data() {
return {
// 是否显示弹出层
open: false,
// 是否显示cropper
visible: false,
// 弹出层标题
title: "修改头像",
options: {
img: store.getters.avatar, //裁剪图片的地址
autoCrop: true, // 是否默认生成截图框
autoCropWidth: 200, // 默认生成截图框宽度
autoCropHeight: 200, // 默认生成截图框高度
fixedBox: true // 固定截图框大小 不允许改变
},
previews: {}
};
},
methods: {
// 编辑头像
editCropper() {
this.open = true;
},
// 打开弹出层结束时的回调
modalOpened() {
this.visible = true;
},
// 覆盖默认的上传行为
requestUpload() {
},
// 向左旋转
rotateLeft() {
this.$refs.cropper.rotateLeft();
},
// 向右旋转
rotateRight() {
this.$refs.cropper.rotateRight();
},
// 图片缩放
changeScale(num) {
num = num || 1;
this.$refs.cropper.changeScale(num);
},
// 上传预处理
beforeUpload(file) {
if (file.type.indexOf("image/") == -1) {
this.$modal.msgError("文件格式错误,请上传图片类型,如JPGPNG后缀的文件。");
} else {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
this.options.img = reader.result;
};
}
},
// 上传图片
uploadImg() {
this.$refs.cropper.getCropBlob(data => {
let formData = new FormData();
formData.append("avatarFile", data);
uploadAvatar(formData).then(resp => {
this.open = false;
// this.options.img = process.env.VUE_APP_BASE_API + response.imgUrl;
store.commit('SET_AVATAR', resp.data);
this.$modal.msgSuccess("修改成功");
this.visible = false;
});
});
},
// 实时预览
realTime(data) {
this.previews = data;
},
// 取消截图,关闭对话框
closeDialog() {
this.options.img = store.getters.avatar
}
}
};
</script>
<style scoped lang="scss">
.user-info-head {
position: relative;
display: inline-block;
height: 120px;
}
.user-info-head:hover:after {
content: '+';
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
color: #eee;
background: rgba(0, 0, 0, 0.5);
font-size: 24px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
cursor: pointer;
line-height: 110px;
border-radius: 50%;
}
</style>

View File

@@ -0,0 +1,75 @@
<template>
<el-form ref="form" :model="user" :rules="rules" label-width="80px">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="user.nickname" />
</el-form-item>
<el-form-item label="手机号码" prop="mobile">
<el-input v-model="user.mobile" maxlength="11" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="user.email" maxlength="50" />
</el-form-item>
<el-form-item label="性别">
<el-radio-group v-model="user.sex">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" @click="submit">保存</el-button>
<el-button type="danger" size="mini" @click="close">关闭</el-button>
</el-form-item>
</el-form>
</template>
<script>
import { updateUserProfile } from "@/api/system/user";
export default {
props: {
user: {
type: Object
}
},
data() {
return {
// 表单校验
rules: {
nickname: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
],
email: [
{ required: true, message: "邮箱地址不能为空", trigger: "blur" },
{
type: "email",
message: "请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
],
mobile: [
{ required: true, message: "手机号码不能为空", trigger: "blur" },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
}
};
},
methods: {
submit() {
this.$refs["form"].validate(valid => {
if (valid) {
updateUserProfile(this.user).then(response => {
this.$modal.msgSuccess("修改成功");
});
}
});
},
close() {
this.$tab.closePage();
}
}
};
</script>

View File

@@ -0,0 +1,100 @@
<template>
<el-table :data="socialUsers" :show-header="false">
<el-table-column label="社交平台" align="left" width="120">
<template slot-scope="scope">
<img style="height:20px;vertical-align: middle;" :src="scope.row.img" /> {{ scope.row.title }}
</template>
</el-table-column>
<el-table-column label="操作" align="left" >
<template slot-scope="scope">
<div v-if="scope.row.openid">
已绑定
<el-button size="large" type="text" @click="unbind(scope.row)">(解绑)</el-button>
</div>
<div v-else>
未绑定
<el-button size="large" type="text" @click="bind(scope.row)">(绑定)</el-button>
</div>
</template>
</el-table-column>
</el-table>
</template>
<script>
import {SystemUserSocialTypeEnum} from "@/utils/constants";
import {socialAuthRedirect} from "@/api/login";
import {socialBind, socialUnbind} from "@/api/system/socialUser";
export default {
props: {
user: {
type: Object
},
getUser: { // 刷新用户
type: Function
},
setActiveTab: { // 设置激活的
type: Function
}
},
data() {
return {
};
},
computed: {
socialUsers (){
const socialUsers = [];
for (const i in SystemUserSocialTypeEnum) {
const socialUser = {...SystemUserSocialTypeEnum[i]};
socialUsers.push(socialUser);
if (this.user.socialUsers) {
for (const j in this.user.socialUsers) {
if (socialUser.type === this.user.socialUsers[j].type) {
socialUser.openid = this.user.socialUsers[j].openid;
break;
}
}
}
}
return socialUsers;
}
},
created() {
// 社交绑定
const type = this.$route.query.type;
const code = this.$route.query.code;
const state = this.$route.query.state;
if (!code) {
return;
}
socialBind(type, code, state).then(resp => {
this.$modal.msgSuccess("绑定成功");
this.$router.replace('/user/profile');
// 调用父组件, 刷新
this.getUser();
this.setActiveTab('userSocial');
});
},
methods: {
bind(socialUser) {
// 计算 redirectUri
const redirectUri = location.origin + '/user/profile?type=' + socialUser.type;
// 进行跳转
socialAuthRedirect(socialUser.type, encodeURIComponent(redirectUri)).then((res) => {
// console.log(res.url);
window.location.href = res.data;
});
},
unbind(socialUser) {
socialUnbind(socialUser.type, socialUser.openid).then(resp => {
this.$modal.msgSuccess("解绑成功");
socialUser.openid = undefined;
});
},
close() {
this.$tab.closePage();
}
}
};
</script>

View File

@@ -0,0 +1,339 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="openid" prop="openid">
<el-input v-model="queryParams.openid" placeholder="请输入openid" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="用户名" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入用户名" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="账号" prop="user">
<el-input v-model="queryParams.user" placeholder="请输入账号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="登录密码" prop="password">
<el-input v-model="queryParams.password" placeholder="请输入登录密码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="移动电话" prop="phone">
<el-input v-model="queryParams.phone" placeholder="请输入移动电话" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="身份证" prop="idNo">
<el-input v-model="queryParams.idNo" placeholder="请输入身份证" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="queryParams.email" placeholder="请输入邮箱" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="queryParams.remark" placeholder="请输入备注" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="头像url" prop="headUrl">
<el-input v-model="queryParams.headUrl" placeholder="请输入头像url" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="出生日期" prop="birthDate">
<el-date-picker v-model="queryParams.birthDate" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="籍贯" prop="nativePlace">
<el-input v-model="queryParams.nativePlace" placeholder="请输入籍贯" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="国家" prop="country">
<el-input v-model="queryParams.country" placeholder="请输入国家" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="省份" prop="province">
<el-input v-model="queryParams.province" placeholder="请输入省份" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="城市" prop="city">
<el-input v-model="queryParams.city" placeholder="请输入城市" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="性别" prop="sex">
<el-select v-model="queryParams.sex" placeholder="请选择性别" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:user-info:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:user-info:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="用户id" align="center" prop="id" />
<el-table-column label="openid" align="center" prop="openid" />
<el-table-column label="用户名" align="center" prop="name" />
<el-table-column label="账号" align="center" prop="user" />
<el-table-column label="登录密码" align="center" prop="password" />
<el-table-column label="移动电话" align="center" prop="phone" />
<el-table-column label="身份证" align="center" prop="idNo" />
<el-table-column label="邮箱" align="center" prop="email" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="头像url" align="center" prop="headUrl" />
<el-table-column label="出生日期" align="center" prop="birthDate" />
<el-table-column label="籍贯" align="center" prop="nativePlace" />
<el-table-column label="国家" align="center" prop="country" />
<el-table-column label="省份" align="center" prop="province" />
<el-table-column label="城市" align="center" prop="city" />
<el-table-column label="性别" align="center" prop="sex" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:user-info:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:user-info:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="openid" prop="openid">
<el-input v-model="form.openid" placeholder="请输入openid" />
</el-form-item>
<el-form-item label="用户名" prop="name">
<el-input v-model="form.name" placeholder="请输入用户名" />
</el-form-item>
<el-form-item label="账号" prop="user">
<el-input v-model="form.user" placeholder="请输入账号" />
</el-form-item>
<el-form-item label="登录密码" prop="password">
<el-input v-model="form.password" placeholder="请输入登录密码" />
</el-form-item>
<el-form-item label="移动电话" prop="phone">
<el-input v-model="form.phone" placeholder="请输入移动电话" />
</el-form-item>
<el-form-item label="身份证" prop="idNo">
<el-input v-model="form.idNo" placeholder="请输入身份证" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="头像url" prop="headUrl">
<el-input v-model="form.headUrl" placeholder="请输入头像url" />
</el-form-item>
<el-form-item label="出生日期" prop="birthDate">
<el-date-picker clearable v-model="form.birthDate" type="date" value-format="timestamp" placeholder="选择出生日期" />
</el-form-item>
<el-form-item label="籍贯" prop="nativePlace">
<el-input v-model="form.nativePlace" placeholder="请输入籍贯" />
</el-form-item>
<el-form-item label="国家" prop="country">
<el-input v-model="form.country" placeholder="请输入国家" />
</el-form-item>
<el-form-item label="省份" prop="province">
<el-input v-model="form.province" placeholder="请输入省份" />
</el-form-item>
<el-form-item label="城市" prop="city">
<el-input v-model="form.city" placeholder="请输入城市" />
</el-form-item>
<el-form-item label="性别" prop="sex">
<el-radio-group v-model="form.sex">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createUserInfo, updateUserInfo, deleteUserInfo, getUserInfo, getUserInfoPage, exportUserInfoExcel } from "@/api/system/userInfo";
export default {
name: "UserInfo",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 用户信息列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
openid: null,
name: null,
user: null,
password: null,
phone: null,
idNo: null,
email: null,
remark: null,
headUrl: null,
birthDate: [],
nativePlace: null,
country: null,
province: null,
city: null,
sex: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getUserInfoPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
openid: undefined,
name: undefined,
user: undefined,
password: undefined,
phone: undefined,
idNo: undefined,
email: undefined,
remark: undefined,
headUrl: undefined,
birthDate: undefined,
nativePlace: undefined,
country: undefined,
province: undefined,
city: undefined,
sex: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加用户信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getUserInfo(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改用户信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateUserInfo(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createUserInfo(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除用户信息编号为"' + id + '"的数据项?').then(function() {
return deleteUserInfo(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有用户信息数据项?').then(() => {
this.exportLoading = true;
return exportUserInfoExcel(params);
}).then(response => {
this.$download.excel(response, '用户信息.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,233 @@
<template>
<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="title">
<el-input v-model="queryParams.title" placeholder="请输入标题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="问卷类型编号" prop="typeId" label-width="108px">
<el-input v-model="queryParams.typeId" placeholder="请输入问卷类型编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="问卷类型" prop="type" label-width="98px">
<el-select v-model="queryParams.type" placeholder="请选择问卷类型 住院、门诊" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.WQ_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime" label-width="98px">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:wq:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:wq:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="问卷类型编号" align="center" prop="typeId" />
<el-table-column label="问卷类型" align="center" prop="type" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:wq:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:wq:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="问卷类型编号" prop="typeId">
<el-input v-model="form.typeId" placeholder="请输入问卷类型编号" />
</el-form-item>
<el-form-item label="问卷类型" prop="type">
<el-select v-model="form.type" placeholder="请选择问卷类型 住院、门诊">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.WQ_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createWq, updateWq, deleteWq, getWq, getWqPage, exportWqExcel } from "@/api/system/wq";
export default {
name: "Wq",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 问卷调查列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
title: null,
typeId: null,
type: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
typeId: [{ required: true, message: "问卷类型编号不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getWqPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
title: undefined,
typeId: undefined,
type: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加问卷调查";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getWq(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改问卷调查";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateWq(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createWq(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除问卷调查编号为"' + id + '"的数据项?').then(function() {
return deleteWq(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有问卷调查数据项?').then(() => {
this.exportLoading = true;
return exportWqExcel(params);
}).then(response => {
this.$download.excel(response, '问卷调查.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,276 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="80px">
<el-form-item label="问卷类型编号" prop="typeId" label-width="100px">
<el-input v-model="queryParams.typeId" placeholder="请输入问卷类型编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="问题编号" prop="questionId">
<el-input v-model="queryParams.questionId" placeholder="请输入问题编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="问题类型" prop="questionType">
<el-select v-model="queryParams.questionType" placeholder="请选择问题类型" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="问题标题" prop="questionTitle">
<el-input v-model="queryParams.questionTitle" placeholder="请输入问题标题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="问题答案" prop="questionAnswer">
<el-input v-model="queryParams.questionAnswer" placeholder="请输入问题答案" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="问题其他" prop="questionComment">
<el-input v-model="queryParams.questionComment" placeholder="请输入问题其他" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item label="用户名称" prop="username">
<el-input v-model="queryParams.username" placeholder="请输入用户名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="用户电话" prop="usertel">
<el-input v-model="queryParams.usertel" placeholder="请输入用户电话" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:wqda:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:wqda:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="问卷类型编号" align="center" prop="typeId" />
<el-table-column label="问题编号" align="center" prop="questionId" />
<el-table-column label="问题类型" align="center" prop="questionType" />
<el-table-column label="问题标题" align="center" prop="questionTitle" />
<el-table-column label="问题答案" align="center" prop="questionAnswer" />
<el-table-column label="问题其他" align="center" prop="questionComment" />
<el-table-column label="用户名称" align="center" prop="username" />
<el-table-column label="用户电话" align="center" prop="usertel" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:wqda:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:wqda:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="问卷类型编号" prop="typeId">
<el-input v-model="form.typeId" placeholder="请输入问卷类型编号" />
</el-form-item>
<el-form-item label="问题编号" prop="questionId">
<el-input v-model="form.questionId" placeholder="请输入问题编号" />
</el-form-item>
<el-form-item label="问题类型" prop="questionType">
<el-select v-model="form.questionType" placeholder="请选择问题类型">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="问题标题" prop="questionTitle">
<el-input v-model="form.questionTitle" placeholder="请输入问题标题" />
</el-form-item>
<el-form-item label="问题答案" prop="questionAnswer">
<el-input v-model="form.questionAnswer" placeholder="请输入问题答案" />
</el-form-item>
<el-form-item label="问题其他" prop="questionComment">
<el-input v-model="form.questionComment" placeholder="请输入问题其他" />
</el-form-item>
<el-form-item label="用户名称" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名称" />
</el-form-item>
<el-form-item label="用户电话" prop="usertel">
<el-input v-model="form.usertel" placeholder="请输入用户电话" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createWqda, updateWqda, deleteWqda, getWqda, getWqdaPage, exportWqdaExcel } from "@/api/system/wqda";
export default {
name: "Wqda",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 问卷调查答案列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
typeId: null,
questionId: null,
questionType: null,
questionTitle: null,
questionAnswer: null,
questionComment: null,
username: null,
usertel: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
typeId: [{ required: true, message: "问卷类型编号不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getWqdaPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
typeId: undefined,
questionId: undefined,
questionType: undefined,
questionTitle: undefined,
questionAnswer: undefined,
questionComment: undefined,
username: undefined,
usertel: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加问卷调查答案";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getWqda(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改问卷调查答案";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateWqda(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createWqda(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除问卷调查答案编号为"' + id + '"的数据项?').then(function() {
return deleteWqda(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有问卷调查答案数据项?').then(() => {
this.exportLoading = true;
return exportWqdaExcel(params);
}).then(response => {
this.$download.excel(response, '问卷调查答案.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,322 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="80px">
<el-form-item label="问卷类型" prop="typeId">
<!-- <el-input v-model="queryParams.typeId" placeholder="请输入问卷类型" clearable @keyup.enter.native="handleQuery"/> -->
<el-select v-model="queryParams.typeId" placeholder="请选择问卷类型" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.WQ_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="问题编号" prop="questionId">
<el-input v-model="queryParams.questionId" placeholder="请输入问题编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="问题类型" prop="questionType">
<el-select v-model="queryParams.questionType" placeholder="请选择问题类型" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item> -->
<el-form-item label="问题标题" prop="questionTitle">
<el-input v-model="queryParams.questionTitle" placeholder="请输入问题标题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="问题答案" prop="questionAnswer">
<el-input v-model="queryParams.questionAnswer" placeholder="请输入问题答案" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="问题其他" prop="questionComment">
<el-input v-model="queryParams.questionComment" placeholder="请输入问题其他" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item label="用户名称" prop="username">
<el-input v-model="queryParams.username" placeholder="请输入用户名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="用户电话" prop="usertel">
<el-input v-model="queryParams.usertel" placeholder="请输入用户电话" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<!-- <el-form-item label="问题标题" prop="questionLabel">
<el-input v-model="queryParams.questionLabel" placeholder="请输入问题标题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:wqda-view:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:wqda-view:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" width="60" />
<el-table-column label="问卷类型" align="center" prop="typeId" >
<template slot-scope="scope">
<span v-if="scope.row.typeId === 101">
住院
</span>
<span v-else>
门诊
</span>
</template>
</el-table-column>
<!-- <el-table-column label="问题编号" align="center" prop="questionId" />
<el-table-column label="问题类型" align="center" prop="questionType" /> -->
<el-table-column label="问题标题" align="left" prop="questionLabel" width="400"/>
<el-table-column label="问题答案" align="center" prop="questionTitle" >
<template slot-scope="scope">
<span v-if="scope.row.questionTitle === '其他'">
其他:{{ scope.row.questionComment }}
</span>
<span v-else>
{{ scope.row.questionTitle }}
</span>
</template>
</el-table-column>
<!-- <el-table-column label="问题其他" align="center" prop="questionComment" /> -->
<el-table-column label="用户名称" align="center" prop="username" />
<el-table-column label="用户电话" align="center" prop="usertel" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:wqda-view:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:wqda-view:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="问卷类型" prop="typeId">
<el-select v-model="queryParams.typeId" placeholder="请选择问卷类型" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.WQ_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="问题编号" prop="questionId">
<el-input v-model="form.questionId" placeholder="请输入问题编号" />
</el-form-item>
<el-form-item label="问题类型" prop="questionType">
<el-select v-model="queryParams.questionType" placeholder="请选择问题类型" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.WQWT_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="问题标题" prop="questionTitle">
<el-input v-model="form.questionTitle" placeholder="请输入问题标题" />
</el-form-item>
<el-form-item label="问题答案" prop="questionAnswer">
<el-input v-model="form.questionAnswer" placeholder="请输入问题答案" />
</el-form-item>
<el-form-item label="问题其他" prop="questionComment">
<el-input v-model="form.questionComment" placeholder="请输入问题其他" />
</el-form-item>
<el-form-item label="用户名称" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名称" />
</el-form-item>
<el-form-item label="用户电话" prop="usertel">
<el-input v-model="form.usertel" placeholder="请输入用户电话" />
</el-form-item>
<el-form-item label="问题标题" prop="questionLabel">
<el-input v-model="form.questionLabel" placeholder="请输入问题标题" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createWqdaView, updateWqdaView, deleteWqdaView, getWqdaView, getWqdaViewPage, exportWqdaViewExcel } from "@/api/system/wqdaView";
const date = new Date();
const year = date.getFullYear();
const month = ('0' + (date.getMonth() +1 )).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
const hours = ('0' + date.getHours()).slice(-2);
const minutes = ('0' + date.getMinutes()).slice(-2);
const seconds = ('0' + date.getSeconds()).slice(-2);
const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
export default {
name: "WqdaView",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// VIEW列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
typeId: null,
questionId: null,
questionType: null,
questionTitle: null,
questionAnswer: null,
questionComment: null,
username: null,
usertel: null,
createTime: [],
questionLabel: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
typeId: [{ required: true, message: "问卷类型编号不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getWqdaViewPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
typeId: undefined,
questionId: undefined,
questionType: undefined,
questionTitle: undefined,
questionAnswer: undefined,
questionComment: undefined,
username: undefined,
usertel: undefined,
questionLabel: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getWqdaView(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateWqdaView(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createWqdaView(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除VIEW编号为"' + id + '"的数据项?').then(function() {
return deleteWqdaView(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有VIEW数据项?').then(() => {
this.exportLoading = true;
return exportWqdaViewExcel(params);
}).then(response => {
let filename = formattedDate + 'wqda.xls';
this.$download.excel(response, filename);
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>

View File

@@ -0,0 +1,283 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="问卷类型编号" prop="typeId">
<el-input v-model="queryParams.typeId" placeholder="请输入问卷类型编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="问题编号" prop="questionId">
<el-input v-model="queryParams.questionId" placeholder="请输入问题编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="父id" prop="pid">
<el-input v-model="queryParams.pid" placeholder="请输入父id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="问题级别,分为两级" prop="gradingType">
<el-select v-model="queryParams.gradingType" placeholder="请选择问题级别,分为两级" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item> -->
<el-form-item label="问题类型" prop="questionType">
<el-select v-model="queryParams.questionType" placeholder="请选择问题类型" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.WQWT_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="问题标题" prop="questionTitle">
<el-input v-model="queryParams.questionTitle" placeholder="请输入问题标题" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="选项数目" prop="questionOpnum">
<el-input v-model="queryParams.questionOpnum" placeholder="请输入选项数目" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:wqwt:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['system:wqwt:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="问卷类型编号" align="center" prop="typeId" />
<el-table-column label="问题编号" align="center" prop="questionId" />
<el-table-column label="父id" align="center" prop="pid" />
<el-table-column label="问题级别(两级)" align="center" prop="gradingType" />
<el-table-column label="问题类型" align="center" prop="questionType" />
<el-table-column label="问题标题" align="center" :show-overflow-tooltip="true" prop="questionTitle" />
<el-table-column label="选项数目" align="center" prop="questionOpnum" />
<el-table-column label="问题内容" align="center" :show-overflow-tooltip="true" prop="questionContent" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</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:wqwt:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:wqwt:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="550px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-form-item label="问卷类型编号" prop="typeId" >
<el-input v-model="form.typeId" placeholder="请输入问卷类型编号" />
</el-form-item>
<el-form-item label="问题编号" prop="questionId">
<el-input v-model="form.questionId" placeholder="请输入问题编号" />
</el-form-item>
<el-form-item label="父id" prop="pid">
<el-input v-model="form.pid" placeholder="请输入父id" />
</el-form-item>
<el-form-item label="问题级别(两级)" prop="gradingType">
<el-input v-model="form.gradingType" placeholder="问题级别(两级)" />
<!-- <el-select v-model="form.gradingType" placeholder="请选择问题级别,分为两级">
<el-option label="请选择字典生成" value="2" />
</el-select> -->
</el-form-item>
<el-form-item label="问题类型" prop="questionType">
<el-select v-model="form.questionType" placeholder="请选择问题类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.WQWT_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="问题标题" prop="questionTitle">
<el-input v-model="form.questionTitle" placeholder="请输入问题标题" />
</el-form-item>
<el-form-item label="选项数目" prop="questionOpnum">
<el-input v-model="form.questionOpnum" placeholder="请输入选项数目" />
</el-form-item>
<el-form-item label="问题内容">
<!-- <editor v-model="form.questionContent" :min-height="192"/> -->
<el-input v-model="form.questionContent" placeholder="请输入问题内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createWqwt, updateWqwt, deleteWqwt, getWqwt, getWqwtPage, exportWqwtExcel } from "@/api/system/wqwt";
import Editor from '@/components/Editor';
export default {
name: "Wqwt",
components: {
Editor,
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 问卷调查问题列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
typeId: null,
questionId: null,
pid: null,
gradingType: null,
questionType: null,
questionTitle: null,
questionOpnum: null,
questionContent: null,
createTime: [],
},
// 表单参数
form: {},
// 表单校验
rules: {
typeId: [{ required: true, message: "问卷类型编号不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 执行查询
getWqwtPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
typeId: undefined,
questionId: undefined,
pid: undefined,
gradingType: undefined,
questionType: undefined,
questionTitle: undefined,
questionOpnum: undefined,
questionContent: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加问卷调查问题";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getWqwt(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改问卷调查问题";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateWqwt(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
// 添加的提交
createWqwt(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除问卷调查问题编号为"' + id + '"的数据项?').then(function() {
return deleteWqwt(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有问卷调查问题数据项?').then(() => {
this.exportLoading = true;
return exportWqwtExcel(params);
}).then(response => {
this.$download.excel(response, '问卷调查问题.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>