index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. <template>
  2. <div class="app-container">
  3. <el-row :gutter="20">
  4. <!--部门数据-->
  5. <!-- <el-col :span="4" :xs="24">
  6. <el-scrollbar>
  7. <div class="tree-overflow">
  8. <div class="head-container">
  9. <el-input v-model="deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search"
  10. style="margin-bottom: 20px;width: 160px;" />
  11. </div>
  12. <div class="head-container">
  13. <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false"
  14. :filter-node-method="filterNode" ref="tree" highlight-current @node-click="handleNodeClick" />
  15. </div>
  16. </div>
  17. </el-scrollbar>
  18. </el-col> -->
  19. <el-col :span="24" :xs="24">
  20. <!-- 搜索工作栏 -->
  21. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="140px">
  22. <el-form-item label="检查项名称" prop="inspName">
  23. <el-input v-model="queryParams.inspName" placeholder="请输入检查项名称" clearable @keyup.enter.native="handleQuery" />
  24. </el-form-item>
  25. <!-- <el-form-item label="检查项代码" prop="inspCode">
  26. <el-input v-model="queryParams.inspCode" placeholder="请输入检查项代码" clearable @keyup.enter.native="handleQuery" />
  27. </el-form-item> -->
  28. <el-form-item label="检查项类型" prop="inspType">
  29. <el-select v-model="queryParams.inspType" placeholder="请选择检查项类型" clearable size="small">
  30. <el-option v-for="dict in this.getDictDatas(DICT_TYPE.DICT_INSPECT_TYPE)" :key="dict.value"
  31. :label="dict.label" :value="dict.value" />
  32. </el-select>
  33. </el-form-item>
  34. <!-- <el-form-item label="状态" prop="status">
  35. <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
  36. <el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label"
  37. :value="parseInt(dict.value)" />
  38. </el-select>
  39. </el-form-item> -->
  40. <el-form-item>
  41. <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
  42. <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
  43. </el-form-item>
  44. </el-form>
  45. <!-- 操作工具栏 -->
  46. <el-row :gutter="10" class="mb8">
  47. <el-col :span="1.5">
  48. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
  49. v-hasPermi="['backend:inspect-info:create']">新增</el-button>
  50. </el-col>
  51. <el-col :span="1.5">
  52. <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
  53. :loading="exportLoading" v-hasPermi="['backend:inspect-info:export']">导出</el-button>
  54. </el-col>
  55. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  56. </el-row>
  57. <!-- 列表 -->
  58. <el-table v-loading="loading" :data="list">
  59. <el-table-column label="ID" align="center" prop="id" />
  60. <el-table-column label="检查项名称" align="center" prop="inspName" />
  61. <el-table-column label="检查项代码" align="center" :show-overflow-tooltip="true">
  62. <template v-slot="scope">
  63. <router-link :to="'/inspectInfo/list/data/' + scope.row.id" class="link-type">
  64. <span>{{ scope.row.inspCode }}</span>
  65. </router-link>
  66. </template>
  67. </el-table-column>
  68. <el-table-column label="检查项类型" align="center" prop="inspType">
  69. <template v-slot="scope">
  70. <dict-tag :type="DICT_TYPE.DICT_INSPECT_TYPE" :value="scope.row.inspType" />
  71. </template>
  72. </el-table-column>
  73. <!-- <el-table-column label="状态" align="center" prop="status">
  74. <template v-slot="scope">
  75. <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
  76. </template>
  77. </el-table-column> -->
  78. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  79. <template v-slot="scope">
  80. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
  81. v-hasPermi="['backend:inspect-info:update']">修改</el-button>
  82. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
  83. v-hasPermi="['backend:inspect-info:delete']">删除</el-button>
  84. </template>
  85. </el-table-column>
  86. </el-table>
  87. <!-- 分页组件 -->
  88. <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
  89. @pagination="getList" />
  90. </el-col>
  91. </el-row>
  92. <!-- 对话框(添加 / 修改) -->
  93. <el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
  94. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  95. <!-- <el-form-item label="上级检查项" prop="pid">
  96. <treeselect v-model="form.pid" :options="deptOptions" :show-count="true" :clearable="false" placeholder="上级检查项"
  97. :normalizer="normalizer" />
  98. </el-form-item> -->
  99. <el-form-item label="检查项名称" prop="inspName">
  100. <el-input v-model="form.inspName" placeholder="请输入检查项名称" />
  101. </el-form-item>
  102. <el-form-item label="检查项代码" prop="inspCode">
  103. <el-input v-model="form.inspCode" placeholder="请输入检查项代码" />
  104. </el-form-item>
  105. <el-form-item label="检查项类型" prop="inspType">
  106. <el-select v-model="form.inspType" placeholder="请选择检查项类型" @change="inspTypeChange" >
  107. <el-option v-for="dict in this.getDictDatas(DICT_TYPE.DICT_INSPECT_TYPE)" :key="dict.value"
  108. :label="dict.label" :value="dict.value"/>
  109. </el-select>
  110. </el-form-item>
  111. <el-form-item label="设备类型" prop="fpdType" v-if="form.inspType == 'fpd'">
  112. <el-select v-model="form.fpdType" placeholder="请选择检查项类型">
  113. <el-option v-for="dict in this.getDictDatas(DICT_TYPE.DICT_FIRE_DECIVE_TYPE)" :key="dict.value" :label="dict.label"
  114. :value="dict.value" />
  115. </el-select>
  116. </el-form-item>
  117. <el-form-item label="备注" prop="remark">
  118. <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
  119. </el-form-item>
  120. <!-- <el-form-item label="状态" prop="status">
  121. <el-radio-group v-model="form.status">
  122. <el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" :key="dict.value"
  123. :label="parseInt(dict.value)">{{ dict.label }}</el-radio>
  124. </el-radio-group>
  125. </el-form-item> -->
  126. </el-form>
  127. <div slot="footer" class="dialog-footer">
  128. <el-button type="primary" @click="submitForm">确 定</el-button>
  129. <el-button @click="cancel">取 消</el-button>
  130. </div>
  131. </el-dialog>
  132. </div>
  133. </template>
  134. <script>
  135. import { createInspectInfo, updateInspectInfo, deleteInspectInfo, getInspectInfo, getInspectInfoPage, exportInspectInfoExcel } from "@/api/backend/inspectInfo"
  136. import { getInspectInfoTree, getInspectInfoNavTree } from "@/api/backend/inspectInfo";
  137. import { DICT_TYPE, getDictDatas } from "@/utils/dict";
  138. import Treeselect from "@riophae/vue-treeselect";
  139. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  140. export default {
  141. name: "InspectInfo",
  142. components: {
  143. Treeselect
  144. },
  145. data() {
  146. return {
  147. // 遮罩层
  148. loading: true,
  149. // 导出遮罩层
  150. exportLoading: false,
  151. // 显示搜索条件
  152. showSearch: true,
  153. // 总条数
  154. total: 0,
  155. // 检查项基础信息主列表
  156. list: [],
  157. // 弹出层标题
  158. title: "",
  159. // 是否显示弹出层
  160. open: false,
  161. // 查询参数
  162. queryParams: {
  163. pageNo: 1,
  164. pageSize: 10,
  165. inspName: null,
  166. inspCode: null,
  167. inspType: null,
  168. status: null,
  169. },
  170. // 表单参数
  171. form: {
  172. status: 0
  173. },
  174. // 表单校验
  175. rules: {
  176. inspName: [{ required: true, message: "检查项名称不能为空", trigger: "blur" }],
  177. // inspCode: [{ required: true, message: "检查项代码不能为空", trigger: "blur" }],
  178. inspCode:[{ required: true, message: "检查项代码不能为空", trigger: "blur" }],
  179. status: [{ required: true, message: "状态不能为空", trigger: "blur" }],
  180. inspType:[{ required: true, message: "请选择检查项类型", trigger: "blur" }],
  181. },
  182. // ========树相关===================
  183. // 部门名称
  184. deptName: undefined,
  185. // 部门树选项
  186. deptOptions: undefined,
  187. defaultProps: {
  188. children: "inspectInfoDOList",
  189. label: "label"
  190. },
  191. // ============================================
  192. // 数据字典
  193. statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS), //状态
  194. }
  195. },
  196. created() {
  197. this.getList()
  198. },
  199. methods: {
  200. /** 查询列表 */
  201. getList() {
  202. this.loading = true
  203. // 执行查询
  204. this.loading = false
  205. getInspectInfoPage(this.queryParams).then(response => {
  206. this.list = response.data.list
  207. this.total = response.data.total
  208. this.loading = false
  209. })
  210. this.getTreeselect();
  211. },
  212. // ========树相关===================
  213. /** 查询部门下拉树结构 + 岗位下拉 */
  214. getTreeselect() {
  215. getInspectInfoNavTree({ inspType: 'dict_inspect_type' }).then(response => {
  216. // 处理 deptOptions 参数
  217. // this.deptOptions = [];
  218. // this.deptOptions.push(...this.handleTree(response.data, "id"));
  219. this.deptOptions = response.data
  220. });
  221. },
  222. // 格式化部门的下拉框
  223. normalizer(node) {
  224. return {
  225. id: node.id,
  226. label: node.inspName,
  227. children: node.childrenList
  228. }
  229. },
  230. // 筛选节点
  231. filterNode(value, data) {
  232. if (!value) return true;
  233. return data.name.indexOf(value) !== -1;
  234. },
  235. // 节点单击事件
  236. handleNodeClick(data) {
  237. this.queryParams.pid = data.id;
  238. this.getList();
  239. },
  240. // ============================================
  241. /** 取消按钮 */
  242. cancel() {
  243. this.open = false
  244. this.reset()
  245. },
  246. /** 表单重置 */
  247. reset() {
  248. this.form = {
  249. id: undefined,
  250. pid: undefined,
  251. inspName: undefined,
  252. inspCode: undefined,
  253. inspType: undefined,
  254. remark: undefined,
  255. status: 0,
  256. }
  257. this.resetForm("form")
  258. },
  259. /** 搜索按钮操作 */
  260. handleQuery() {
  261. this.queryParams.pageNo = 1
  262. this.getList()
  263. },
  264. /** 重置按钮操作 */
  265. resetQuery() {
  266. this.resetForm("queryForm")
  267. this.handleQuery()
  268. },
  269. /** 新增按钮操作 */
  270. handleAdd() {
  271. this.reset()
  272. this.open = true
  273. this.title = "添加检查项基础信息"
  274. },
  275. /** 修改按钮操作 */
  276. handleUpdate(row) {
  277. this.reset()
  278. const id = row.id
  279. getInspectInfo(id).then(response => {
  280. this.form = response.data
  281. this.open = true
  282. this.title = "修改检查项基础信息"
  283. })
  284. },
  285. /** 提交按钮 */
  286. submitForm() {
  287. this.$refs["form"].validate((valid) => {
  288. if (!valid) {
  289. return
  290. }
  291. // 修改的提交
  292. if (this.form.id != null) {
  293. console.log('this.form', this.form)
  294. updateInspectInfo(this.form).then((response) => {
  295. this.$modal.msgSuccess("修改成功")
  296. this.open = false
  297. this.getList()
  298. })
  299. return
  300. }
  301. // 添加的提交
  302. createInspectInfo(this.form).then((response) => {
  303. this.$modal.msgSuccess("新增成功")
  304. this.open = false
  305. this.getList()
  306. })
  307. })
  308. },
  309. /** 删除按钮操作 */
  310. handleDelete(row) {
  311. const id = row.id
  312. this.$modal
  313. .confirm('是否确认删除名称为"' + row.inspName + '"的数据项?')
  314. .then(function () {
  315. return deleteInspectInfo(id)
  316. })
  317. .then(() => {
  318. this.getList()
  319. this.$modal.msgSuccess("删除成功")
  320. })
  321. .catch(() => { })
  322. },
  323. /** 导出按钮操作 */
  324. handleExport() {
  325. // 处理查询参数
  326. let params = { ...this.queryParams }
  327. params.pageNo = undefined
  328. params.pageSize = undefined
  329. // 执行导出
  330. this.$modal
  331. .confirm("是否确认导出?")
  332. .then(() => {
  333. this.exportLoading = true
  334. return exportInspectInfoExcel(params)
  335. })
  336. .then((response) => {
  337. this.$download.excel(response, "检查列表.xls")
  338. this.exportLoading = false
  339. })
  340. .catch(() => { })
  341. },
  342. inspTypeChange(e) {
  343. if(e!='fpd'){
  344. this.form.fpdType=null
  345. }
  346. console.log('inspTypeChange', e);
  347. }
  348. },
  349. }
  350. </script>
  351. <style scoped>
  352. ::v-deep .el-scrollbar__view {
  353. overflow-x: auto;
  354. }
  355. .tree-overflow {
  356. height: 81vh;
  357. width: 30vw;
  358. }
  359. </style>