linwenxin 5 mesiacov pred
rodič
commit
488abf48da

+ 37 - 0
src/api/explainTypeConfig.js

@@ -0,0 +1,37 @@
+import request, { postBlob, getBlob, handleImport } from '@/utils/request'
+
+export function appraiseApplyCategoryList(data) {
+  return request({
+    url: `/appraise/apply/category/list?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
+export function appraiseApplyCategorySave(data) {
+  return request({
+    url: '/appraise/apply/category/save',
+    method: 'post',
+    data
+  })
+}
+
+export function appraiseApplyCategoryDel(data) {
+  return request({
+    url: '/appraise/apply/category/del',
+    method: 'post',
+    data
+  })
+}
+
+export function appraiseApplyCategoryDetail(params) {
+  return request({
+    url: '/appraise/apply/category/detail',
+    method: 'post',
+    params
+  })
+}
+
+export function appraiseApplyCategoryImport(data) {
+  return handleImport('/appraise/apply/category/import', data.formdata, data.id || '')
+}

+ 337 - 0
src/views/workOrder/appraiseAppeal/explainTypeConfig/index.vue

@@ -0,0 +1,337 @@
+<template>
+  <zj-page-container direction="row">
+    <div style="min-width: 220px; height: 100%">
+      <zj-page-container>
+        <div class="title">
+          <el-button
+            style="margin-right: 5px"
+            type="primary"
+            size="mini"
+            icon="el-icon-plus"
+            @click="tianjiayiji"
+          ></el-button>
+          <el-button style="margin-right: 5px" size="mini" icon="el-icon-search" @click="getTreeListData"></el-button>
+          <el-input size="mini" v-model="filterText" placeholder="请输入内容"></el-input>
+        </div>
+        <zj-page-fill>
+          <el-tree
+            :data="treeList"
+            :props="defaultProps"
+            default-expand-all
+            :highlight-current="true"
+            :expand-on-click-node="false"
+            @node-click="handleNodeClick"
+            :filter-node-method="filterNode"
+            ref="listTree"
+          >
+            <div class="custom-tree-node" slot-scope="{ node, data }">
+              <span>{{ node.label }}</span>
+              <span>
+                <el-button size="mini" type="text" @click="eidbumen(data)">
+                  <i class="el-icon-edit"></i>
+                </el-button>
+                <el-button size="mini" type="text" @click="delbumen(data)">
+                  <i class="el-icon-delete"></i>
+                </el-button>
+              </span>
+            </div>
+          </el-tree>
+        </zj-page-fill>
+      </zj-page-container>
+    </div>
+    <template-page
+      ref="pageRef"
+      :getList="getList"
+      :columnParsing="columnParsing"
+      :optionsEvensGroup="optionsEvensGroup"
+      :tableAttributes="tableAttributes"
+      :tableEvents="tableEvents"
+      :operationColumnWidth="160"
+      :operation="operation()"
+    >
+      <el-dialog title="申述大类" :visible.sync="dialogVisible" width="500px" :before-close="handleClose">
+        <el-form ref="form" :model="form" label-width="100px" size="mini">
+          <el-form-item label="大类名称">
+            <el-input v-model="form.name"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="queding">确定</el-button>
+            <el-button @click="handleClose">取消</el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+      <el-dialog title="申述小类" :visible.sync="dialogVisible2" width="500px" :before-close="handleClose2">
+        <el-form ref="form" :model="form2" label-width="120px" size="mini">
+          <el-form-item label="问题大类">
+            <el-input disabled v-model="form2.parentName"></el-input>
+          </el-form-item>
+          <el-form-item label="小类名称">
+            <el-input v-model="form2.name"></el-input>
+          </el-form-item>
+          <el-form-item label="状态">
+            <el-radio-group v-model="form2.status">
+              <el-radio :label="true">启用</el-radio>
+              <el-radio :label="false">禁用</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="queding2">确定</el-button>
+            <el-button @click="handleClose2">取消</el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+    </template-page>
+  </zj-page-container>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import {
+  appraiseApplyCategoryList,
+  appraiseApplyCategorySave,
+  appraiseApplyCategoryDetail,
+  appraiseApplyCategoryImport,
+  appraiseApplyCategoryDel
+} from '@/api/explainTypeConfig.js'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import { commonTemplateDownload } from '@/api/common.js'
+import import_mixin from '@/components/template/import_mixin.js'
+export default {
+  components: {
+    TemplatePage
+  },
+  mixins: [operation_mixin, import_mixin],
+  data() {
+    return {
+      // 表格属性
+      tableAttributes: {},
+      // 表格事件
+      tableEvents: {},
+      visible: false,
+      item: null,
+      treeList: [],
+      defaultProps: {
+        children: 'children',
+        label: 'name'
+      },
+      filterText: '',
+      dialogVisible: false,
+      form: {
+        name: '',
+        parentId: 0,
+        status: true
+      },
+      dialogVisible2: false,
+      form2: {
+        name: '',
+        parentId: 0,
+        parentName: '',
+        status: true
+      },
+      adminDept: null
+    }
+  },
+  mounted() {
+    this.getTreeListData()
+  },
+  computed: {
+    // 事件组合
+    optionsEvensGroup() {
+      return [
+        [
+          ...(() => {
+            if (this.adminDept) {
+              return [
+                [
+                  this.optionsEvensAuth('add', {
+                    click: () => {
+                      if (this?.adminDept?.id) {
+                        this.form2 = {
+                          name: '',
+                          parentId: this?.adminDept?.id,
+                          parentName: this?.adminDept?.name,
+                          status: true
+                        }
+                        this.dialogVisible2 = true
+                      }
+                    }
+                  })
+                ]
+              ]
+            } else {
+              return []
+            }
+          })(),
+          [
+            this.optionsEvensAuth('import', ({ moduleName }) => {
+              return {
+                name: moduleName,
+                render: () => {
+                  return this.importButton(appraiseApplyCategoryImport, moduleName)
+                }
+              }
+            })
+          ],
+          [
+            this.optionsEvensAuth('download', {
+              click: () => {
+                commonTemplateDownload({ name: '评价问题类别模板.xlsx' }, `${this.$route.meta.title}`)
+                  .then(res => {
+                    this.$message({
+                      message: '下载成功',
+                      type: 'success'
+                    })
+                  })
+                  .catch(err => {
+                    this.$message.error('下载失败')
+                  })
+              }
+            })
+          ]
+        ]
+      ]
+    }
+  },
+  watch: {
+    filterText(val) {
+      this?.$refs?.listTree?.filter?.(val)
+    }
+  },
+  methods: {
+    filterNode(value, data) {
+      if (!value) return true
+      return data.name.indexOf(value) !== -1
+    },
+    // 请求属性数据
+    getTreeListData() {
+      appraiseApplyCategoryList({
+        orderBy: '',
+        pageNum: 1,
+        pageSize: -1,
+        params: [{ param: 'a.parent_id', compare: '=', value: '0' }]
+      }).then(res => {
+        this.treeList = res.data.records
+      })
+    },
+    // 树形选中
+    handleNodeClick(e) {
+      this.adminDept = { ...e }
+      this.$refs.pageRef?.refreshList()
+    },
+    // 列表请求函数
+    getList(pam, cb) {
+      try {
+        if (this?.adminDept?.id) {
+          pam.params.push({ param: 'a.parent_id', compare: '=', value: this?.adminDept?.id })
+        } else {
+          pam.params.push({ param: 'a.parent_id', compare: '=', value: 'XXXXXXXXXXXXXXXXXXXX' })
+        }
+        cb && cb(pam)
+        return appraiseApplyCategoryList(pam)
+      } catch (err) {
+      } finally {
+      }
+    },
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+    operation() {
+      return this.operationBtn({
+        edit: {
+          click: ({ row, index, column }) => {
+            this.form2 = { ...row }
+            this.dialogVisible2 = true
+          }
+        }
+      })
+    },
+    tianjiayiji() {
+      this.form = { name: '', parentId: 0, status: true }
+      this.dialogVisible = true
+    },
+    eidbumen(data) {
+      this.form = { ...data }
+      this.dialogVisible = true
+    },
+    delbumen(data) {
+      appraiseApplyCategoryDel([data.id]).then(res => {
+        this.getTreeListData()
+        this.$message({
+          type: 'success',
+          message: '删除成功'
+        })
+      })
+    },
+    queding() {
+      if (!this.form.name) {
+        this.$message.warning('大类名称不能为空')
+      }
+      appraiseApplyCategorySave(this.form).then(res => {
+        this.getTreeListData()
+        this.handleClose()
+        this.$message({
+          type: 'success',
+          message: '设置成功'
+        })
+      })
+    },
+    handleClose() {
+      this.dialogVisible = false
+      this.form = {
+        name: '',
+        parentId: 0,
+        status: true
+      }
+    },
+    // -----------------------------------------
+    queding2() {
+      if (!this.form2.name) {
+        this.$message.warning('小类名称不能为空')
+      }
+      appraiseApplyCategorySave({
+        ...this.form2
+      }).then(res => {
+        this.$refs.pageRef?.refreshList()
+        this.handleClose2()
+        this.$message({
+          type: 'success',
+          message: '设置成功'
+        })
+      })
+    },
+    handleClose2() {
+      this.dialogVisible2 = false
+      this.form2 = {
+        name: '',
+        parentId: 0,
+        status: true
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep .zj-page-fill-scroll {
+  overflow-x: auto;
+}
+.title {
+  width: 100%;
+  padding: 20px 0 10px 20px;
+  display: flex;
+  justify-content: space-between;
+  margin-bottom: 10px;
+  border-bottom: 1px solid #cccccc;
+  font-weight: bold;
+}
+
+.custom-tree-node {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  font-size: 14px;
+  padding-right: 8px;
+}
+</style>