Browse Source

0.0.19

官方保存
Sean 5 months ago
parent
commit
3ed46443bc

BIN
public/favicon.ico


+ 58 - 0
src/api/system.js

@@ -0,0 +1,58 @@
+import request from '@/utils/request'
+
+//1.系统设置 start ------------------------------------->
+
+//1.1 获取职能部门列表
+export function getDepartmentList(data) {
+  return request({
+    url: '/public/getZhinengbumenList',
+    method: 'post',
+    data
+  })
+}
+
+//1.2 获取职能部门详情
+export function getDepartmentMain(data) {
+  return request({
+    url: '/public/getZhinengbumen',
+    method: 'post',
+    data
+  })
+}
+
+//1.3 添加职能部门
+export function addDepartment(data) {
+  return request({
+    url: '/public/addZhinengbumen',
+    method: 'post',
+    data
+  })
+}
+
+//1.4 删除职能部门  
+export function delDepartment(data) {
+  return request({
+    url: '/public/delZhinengbumen',
+    method: 'post',
+    data
+  })
+}
+
+//1.5 修改职能部门
+export function upDepartment(data) {
+  return request({
+    url: '/public/modZhinengbumen',
+    method: 'post',
+    data
+  })
+}
+
+//1.6 获取职能部门列表
+export function getAllDepartment(data) {
+  return request({
+    url: '/public/getPidZhinengbumen',
+    method: 'post',
+    data
+  })
+}
+//系统设置 end ------------------------------------->

+ 9 - 0
src/api/user.js

@@ -42,3 +42,12 @@ export function getImgCode() {
     method: 'get',
   })
 }
+
+// 获取用户身份信息
+export function changePassword(data) {
+  return request({
+    url: '/user/changePassword',
+    method: 'post',
+    data
+  })
+}

+ 21 - 1
src/router/index.js

@@ -252,6 +252,22 @@ export const constantRoutes = [
       }
     ]
   },
+  {
+    path: '/department',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/menu/department'),
+        meta: {
+          title: '行政职能',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  },
   // {
   //   path: '/documentation',
   //   component: Layout,
@@ -287,7 +303,11 @@ export const constantRoutes = [
         path: 'index',
         component: () => import('@/views/profile/index'),
         name: 'Profile',
-        meta: { title: 'profile', icon: 'user', noCache: true }
+        meta: {
+          title: '个人中心',
+          hidden: true,
+          breadcrumb: true
+        }
       }
     ]
   }

+ 90 - 1
src/store/modules/public.js

@@ -1,4 +1,8 @@
 import {getAdminIndex} from '@/api/public'
+import {getInfo,changePassword} from '@/api/user'
+import {getDepartmentList,delDepartment,getDepartmentMain,
+  getAllDepartment,addDepartment,upDepartment
+} from '@/api/system'
 
 const state = {
 
@@ -20,8 +24,93 @@ const actions = {
       })
     })
   },
- 
   //公共api end ---------------------------------------->
+  
+  //用户中心 start ---------------------------------------->
+  //获取用户身份信息
+  getInfo({commit},data) {
+    return new Promise((resolve, reject) => {
+      getInfo(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //修改用户密码
+  changePassword({commit},data) {
+    return new Promise((resolve, reject) => {
+      changePassword(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //用户中心 end ---------------------------------------->
+
+  //职能部门 start ---------------------------------------->
+  //获取职能部门列表
+  getDepartmentList({commit},data) {
+    return new Promise((resolve, reject) => {
+      getDepartmentList(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //删除部门
+  delDepartment({commit},data) {
+    return new Promise((resolve, reject) => {
+      delDepartment(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //获取职能部门详情
+  getDepartmentMain({commit},data) {
+    return new Promise((resolve, reject) => {
+      getDepartmentMain(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //获得上一级职能部门列表
+  getAllDepartment({commit},data) {
+    return new Promise((resolve, reject) => {
+      getAllDepartment(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //添加职能部门列表
+  addDepartment({commit},data) {
+    return new Promise((resolve, reject) => {
+      addDepartment(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  },
+  //编辑职能部门
+  upDepartment({commit},data) {
+    return new Promise((resolve, reject) => {
+      upDepartment(data).then(response => {
+        resolve(response)
+      }).catch(error => {
+        reject(error)
+      })
+    })
+  }
+  //职能部门 end ---------------------------------------->
 }
 
 

+ 2 - 2
src/utils/request.js

@@ -6,8 +6,8 @@ import { getToken } from '@/utils/auth'
 // create an axios instance
 const service = axios.create({
   //千万不能在这里使用绝对地址,这会导致webpack的devserve不生效
-  baseURL: 'http://192.168.1.201:9501', //老刘服务器
-  //baseURL: 'http://183.131.25.186:9501', //测试服务器
+  //baseURL: 'http://192.168.1.201:9501', //老刘服务器
+  baseURL: 'http://183.131.25.186:9501', //测试服务器
   //baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
   //withCredentials: true, // send cookies when cross-domain requests
   timeout: 5000 // request timeout

+ 394 - 0
src/views/menu/department.vue

@@ -0,0 +1,394 @@
+<template>
+  <div class="mainBox">
+    <!--搜索功能 start------------------------------------------------------------>
+    <div class="layerBoxNoBg">
+      <div>
+        <el-button type="primary" @click="openWindow()">添加职能部门</el-button>
+      </div>
+    </div>
+    <!--搜索功能 end------------------------------------------------------------>
+
+    <!--表格内容 start------------------------------------------------------------>
+    <div class="layerBox">
+      <tableTitle :name="tableDivTitle"/>
+      <el-row>
+        <template>
+          <el-table :data="tableData" style="width: 100%">
+            <el-table-column fixed prop="id" label="编号"></el-table-column>
+            <el-table-column prop="name" label="职能部门"></el-table-column>
+            <el-table-column fixed="right" label="操作" width="200" header-align="center">
+              <template slot-scope="scope">
+                <div class="listBtnBox">
+                  <div class="listDeleteBtn" @click="deleteRow(scope.row.id)"><i class="el-icon-edit-outline"></i>删除</div>
+                  <div class="listEditBtn" @click="editRow(scope.row.id)"><i class="el-icon-edit-outline"></i>编辑</div>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+        </template>
+      </el-row>
+    </div>
+
+    <!--分页 start------------------------------------------------------------>
+    <div class="alignBox">
+      <el-row>
+        <el-col :span="24">
+          <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-size="10" layout="total, prev, pager, next, jumper" :total="allCount"></el-pagination>
+        </el-col>
+      </el-row>
+    </div>
+    <!--分页 end------------------------------------------------------------>
+    <!--表格内容 end------------------------------------------------------------>
+
+    <!--弹出框 start------------------------------------------------------------>
+    <el-dialog title="添加职能部门" :visible.sync="windowStatus">
+      <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
+        <div class="formDiv">
+          <el-form-item label="选择上级部门" :label-width="formLabelWidth" prop="pid" class="custom-align-right">
+            <el-cascader :key="searchDepartmentKey" v-model="form.pid" placeholder="选择导航池所属行政区划" :props="searchDepartmentData" filterable clearable></el-cascader>
+          </el-form-item>
+        </div>
+        <div class="formDiv">
+          <el-form-item label="部门名称:" :label-width="formLabelWidth" prop="name" class="custom-align-right">
+            <el-input v-model="form.name" autocomplete="off"></el-input>
+          </el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <div>
+          <el-button @click="closeWindow">取 消</el-button>
+          <el-button type="primary" @click="addData" v-if="editId==0">提交</el-button>
+          <el-button type="primary" @click="editData" v-else>修改</el-button>
+        </div>
+      </div>
+    </el-dialog>
+    <!--弹出框 end------------------------------------------------------------>
+
+  </div>
+</template>
+
+<script>
+//引入公用样式
+import '@/styles/global.less';
+//表格标题
+import tableTitle from './components/tableTitle';
+
+export default {
+  components: {
+    tableTitle,//表格标题
+  },
+  data() {
+    //0.全局操作 start ------------------------------------------------------------>
+    //表单验证
+    const validateEmpty = (rule,value,callback) => {
+      if (!value || value.trim() === "") {
+        callback(new Error('该项不能为空!'));
+      } else {
+        callback();
+      }
+    }
+    const validateArray = (rule,value,callback) => {
+      if (value.length == 0) {
+        callback(new Error('该项不能为空!'))
+      } else {
+        callback()
+      }
+    }
+    let self = this;
+    //0.全局操作 end ------------------------------------------------------------>
+
+    return {
+      //1.列表和分页相关 start ------------------------------------------------------------>
+      tableDivTitle:"角色管理",
+      tableData: [],//列表
+      allCount:0,//总条数
+      editId:0,//要修改的网站id
+      getApiData:{
+        search:"",//职能部门名称
+        page:1,//当前是第几页
+        pageSize:10,//一共多少条
+      },
+      //行政职能部门
+      searchDepartmentKey:0, 
+      searchDepartmentData: {
+        checkStrictly: true,
+        lazy: true,
+        async lazyLoad (node, resolve) {
+          const { level, data } = node;
+          if (data && data.children && data.children.length !== 0) {
+            return resolve(node)
+          }
+          console.log(level)
+          let parentId = level == 0 ? 0 : data.value
+          let parames = {
+            'pid':parentId
+          }
+          self.$store.dispatch('pool/getDepartment',parames).then(res=> {
+            if (res.data) {
+              const nodes = res.data.map(item => ({
+                value: item.id,
+                label: item.name,
+                leaf: level >= 3,
+                children: []
+              }))
+              resolve(nodes)
+            }
+          })
+        }
+      },
+      //分页相关 end ------------------------------------------------------------>
+
+      //2.弹出框设置 start ------------------------------------------------------------>
+      //是否显示弹出窗口
+      windowStatus:false,
+      formLabelWidth: '120px',
+      //弹出框设置 end ------------------------------------------------------------>
+
+      //3.搜索相关 start ------------------------------------------------------------>
+      //搜索相关 end ------------------------------------------------------------>
+
+      //3.弹出框中的表单设置 start ------------------------------------------------------------>
+      //3.1 表单收集的数据
+      form: {
+        pid:"",
+        name:""
+      },
+     
+      //3.2表单验证规则
+      formRules: {
+        //角色名称不能为空
+        pid:[{required:true,trigger:'blur',validator:validateArray}],
+        //职能描述不能为空
+        name:[{required:true,trigger:'blur',validator:validateEmpty}],
+      },
+      //弹出框中的表单设置 end ------------------------------------------------------------>
+    }
+  },
+  methods: {
+    //1.列表和分页相关 start ------------------------------------------------------------>
+    //1.1 获取内容
+    getData(){
+      this.$store.dispatch('public/getDepartmentList',this.getApiData).then(res=> {
+        console.log(res)
+        this.tableData = res.data.rows;
+        this.allCount = res.data.count;
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '网络错误,请重试!'
+        });
+      })
+    },
+    //1.2 列表内容分页
+    //直接跳转
+    handleSizeChange(val) {
+      this.getApiData.page = val;
+      this.getData();
+    },
+    //1.3 点击分页
+    handleCurrentChange(val) {
+      this.getApiData.page = val;
+      this.getData();
+    },
+    //1.4 删除职能部门
+    deleteRow(id){
+      this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        console.log("当前删除:" + id)
+        this.$store.dispatch('public/delDepartment',{id:id}).then(res=> {
+          this.getData();
+          this.$message({
+            type: 'success',
+            message: '删除成功!'
+          });
+        }).catch(() => {
+          this.$message({
+            type: 'warning',
+            message: '网络错误,请重试!'
+          });
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '已取消删除'
+        });
+      });
+    },
+    //列表和分页相关 end ------------------------------------------------------------>
+
+    //2.弹出框设置 start ------------------------------------------------------------>
+    //2.1 打开弹出框
+    openWindow() {
+      this.clearToServe();
+      this.windowStatus = true;
+      //this.$refs.form.clearValidate();
+    },
+    //2.2 关闭弹出框
+    closeWindow(){
+      this.windowStatus = false;
+      this.clearToServe();
+      this.$refs.form.clearValidate();
+    },
+    //2.3 清空提交窗口
+    clearToServe(){
+      this.editId = 0;
+      this.form.pid = [];
+      this.form.name = "";
+    },
+    //弹出框设置 end ------------------------------------------------------------>
+
+    //4.添加 start ------------------------------------------------------------>
+    addData(){
+      if(this.form.pid.length!=0){
+        const lastPicValue = this.form.pid[this.form.pid.length - 1];
+        this.form.pid = String(lastPicValue);
+      } 
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.$store.dispatch('public/addDepartment',this.form).then(res=> {
+            if(res.code == 200){
+              this.$message({
+                type: 'success',
+                message: '已成功添加职能部门!'
+              });
+              console.log(res)
+              this.closeWindow();
+              this.getData();
+            }else{
+              this.$message({
+                type: 'warning',
+                message: res.message
+              });
+              console.log(res)
+              this.closeWindow();
+              this.getData();
+            }
+          }).catch(() => {
+            this.$message({
+              type: 'info',
+              message: '网络错误,请重试!'
+            });
+          })
+        }
+      })
+    },
+    //添加 end ------------------------------------------------------------>
+
+    //4.编辑 start ------------------------------------------------------------>
+    //回显数据
+    editRow(id){
+      this.openWindow();
+      //设置要编辑的id
+      this.editId = id;
+      this.$store.dispatch('public/getDepartmentMain',{id:id}).then(res=> {
+        console.log(res)
+        this.form.name = res.data.name;
+        this.form.pid = res.data.pid;
+        //回显父级导航
+
+        // 这里的接口有问题,应该返回数组,但是返回的只有上一级的pid
+        // 我这里没有办法判断他的层级关系
+        // 检查 res.data.pid 的类型
+
+        if (typeof res.data.pid === 'number') {
+          // 如果是数字,将其转换为数组
+          this.form.pid = [res.data.pid];
+        } else {
+          // 如果已经是数组,直接赋值
+          this.form.pid = JSON.parse(res.data.pid); // 如果是字符串,解析为数组
+        }
+        this.searchDepartmentKey += 1;
+        this.loadCascaderPath(this.form.pid);
+
+        console.log(this.form.pid)
+        console.log(this.searchDepartmentKey)
+
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '网络错误,请重试!'
+        });
+      })
+    },
+    //回显职能部门
+    async loadCascaderPath(path,type) {
+      for (let i = 0; i < path.length; i++) {
+        const parentId = path[i - 1] || 0; // 获取当前层级的父级ID
+        const level = i; // 当前层级的索引
+        await this.$store.dispatch('public/getDepartmentMain', { pid: parentId })
+          .then((res) => {
+            const nodes = res.data.map(item => ({
+              value: item.id,
+              label: item.name,
+              leaf: level >= 3, // 这里假设4层结构,设置叶子节点标记
+            }));
+            // 将数据传递到 resolve,通知 cascader 这一层的数据加载完毕
+            if (level === path.length - 1) {
+              this.form.pid = path;
+            }
+          });
+      }
+    },
+    //提交编辑
+    editData(){
+      this.form.id = this.editId;
+      if(this.form.pid.length!=0){
+        const lastPicValue = this.form.pid[this.form.pid.length - 1];
+        this.form.pid = String(lastPicValue);
+      } 
+      //获取选中的节点
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.$store.dispatch('public/upDepartment',this.form).then(res=> {
+            console.log(res)
+            this.closeWindow();
+            this.$message({
+              type: 'success',
+              message: '修改成功!'
+            });
+            this.getData();
+          }).catch(() => {
+            this.$message({
+              type: 'warning',
+              message: '网络错误,请重试!'
+            });
+          })
+        }
+      })
+    }
+    //编辑 end ------------------------------------------------------------>
+
+  },
+  mounted(){
+    //获取页面列表
+    this.getData();
+    //获取菜单树
+    //this.getAllMenuList();
+  } 
+}
+</script>
+
+<style scoped lang="less">
+.layerBoxNoBg {
+  padding: 30px 0 0 0;
+}
+//表单微调 start------------------------------------------------------------>*/
+::v-deep .custom-form-item > .el-form-item__label {
+  line-height: 140px !important;
+}
+::v-deep .custom-textarea .el-textarea__inner {
+  resize: none; /* 禁止用拖拽调整大小 */
+}
+::v-deep .custom-align-right .el-form-item__label {
+  text-align: right; /* 设置标签文字右对齐 */
+}
+::v-deep .el-select-group__title {
+  color: #909399;
+}
+::v-deep .el-select {
+  width: 100% !important;
+}
+</style>

+ 39 - 0
src/views/profile/components/tableTitle.vue

@@ -0,0 +1,39 @@
+<template>
+  <div class="tableTitle">
+    <span class="tableFloatLine"></span>
+    {{name}}
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    name: {
+      type: String,
+      required: true,
+    },
+  },
+  data() {
+    return {
+      someData: '',
+    };
+  },
+};
+</script>
+
+<style scoped lang="less">
+  .tableTitle {
+    color:#333333;
+    position: relative;
+    padding-bottom: 20px;
+    .tableFloatLine {
+      width: 3px;
+      height:16px;
+      background:#5570F1;
+      display: block;
+      position: absolute;
+      left:-20px;
+      top:1px;
+    }
+  }
+</style>

+ 278 - 49
src/views/profile/index.vue

@@ -1,68 +1,297 @@
 <template>
-  <div class="app-container">
-    <div v-if="user">
-      <el-row :gutter="20">
-
-        <el-col :span="6" :xs="24">
-          <user-card :user="user" />
-        </el-col>
-
-        <el-col :span="18" :xs="24">
-          <el-card>
-            <el-tabs v-model="activeTab">
-              <el-tab-pane label="Activity" name="activity">
-                <activity />
-              </el-tab-pane>
-              <el-tab-pane label="Timeline" name="timeline">
-                <timeline />
-              </el-tab-pane>
-              <el-tab-pane label="Account" name="account">
-                <account :user="user" />
-              </el-tab-pane>
-            </el-tabs>
-          </el-card>
-        </el-col>
+  <div>
+    <div class="userInfoBox">
+      <tableTitle :name="tableDivTitle"/>
+      <div class="infoBox">
+        <div class="infoTitle">当前头像:</div>
+        <div>
+          <img :src="user.avatar" class="avatar">
+        </div>
+      </div>
+      <div class="infoBox">
+        <div class="infoTitle">昵称:</div>
+        <div class="infoInput"><el-input v-model="user.real_name" placeholder="" disabled/></div>
+      </div> 
+    </div>
+    <div class="userInfoBox">
+      <tableTitle :name="tableTitle"/>
+      <el-form ref="form" :model="form" :rules="loginRules" class="login-form" autocomplete="on" label-position="left">
+        <!--现有密码 start------------------------------------------>
+        <el-tooltip v-model="capsTooltip1" content="大小写已开启!" placement="right" manual>
+          <div class="PasswordBox">
+            <div class="PasswordTitle">现有密码:</div>
+            <el-form-item prop="password">
+              <div class="PasswordBody">
+                <el-input
+                  :key="passwordType1"
+                  ref="password1"
+                  v-model="form.password"
+                  :type="passwordType1"
+                  placeholder="请输入密码"
+                  name="password"
+                  tabindex="2"
+                  autocomplete="off"
+                  @blur="capsTooltip1 = false"
+                />
+                <span class="show-pwd" @click="showPwd(1)">
+                  <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
+                </span>
+              </div>
+            </el-form-item>
+          </div>
+        </el-tooltip>
+        <!--现有密码 end------------------------------------------>
+        <!--新密码 start------------------------------------------>
+        <el-tooltip v-model="capsTooltip2" content="大小写已开启!" placement="right" manual>
+          <div class="PasswordBox">
+            <div class="PasswordTitle">新密码</div>
+            <el-form-item prop="new_password">
+              <div class="PasswordBody">
+                <el-input
+                  :key="passwordType2"
+                  ref="password2"
+                  v-model="form.new_password"
+                  :type="passwordType2"
+                  placeholder="请输入密码"
+                  name="password"
+                  tabindex="2"
+                  autocomplete="off"
+                  @blur="capsTooltip2 = false"
+                />
+                <span class="show-pwd" @click="showPwd(2)">
+                  <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
+                </span>
+              </div>
+            </el-form-item>
+          </div>
+        </el-tooltip>
+        <!--新密码 end------------------------------------------>
+        <!--新密码 start------------------------------------------>
+        <el-tooltip v-model="capsTooltip3" content="大小写已开启!" placement="right" manual>
+          <div class="PasswordBox">
+            <div class="PasswordTitle">确认新密码:</div>
+            <el-form-item prop="new_password1">
+              <div class="PasswordBody">
+                <el-input
+                  :key="passwordType3"
+                  ref="password3"
+                  v-model="form.new_password1"
+                  :type="passwordType3"
+                  placeholder="请输入密码"
+                  name="password"
+                  tabindex="2"
+                  autocomplete="off"
+                  @blur="capsTooltip3 = false"
+                />
+                <span class="show-pwd" @click="showPwd(3)">
+                  <svg-icon :icon-class="passwordType3 === 'password' ? 'eye' : 'eye-open'" />
+                </span>
+              </div>
+            </el-form-item>
+          </div>
+        </el-tooltip>
+        <!--新密码 end------------------------------------------>
+      </el-form>
+    </div>
 
-      </el-row>
+    <div class="infoBtnBox">
+      <el-button type="info" @click="clearInput">重置</el-button>
+      <el-button type="primary" @click="changePassword">保存</el-button>
     </div>
-  </div>
+  </div>  
 </template>
 
 <script>
-import { mapGetters } from 'vuex'
-import UserCard from './components/UserCard'
-import Activity from './components/Activity'
-import Timeline from './components/Timeline'
-import Account from './components/Account'
+//引入公用样式
+import '@/styles/global.less';
+//表格标题
+import tableTitle from './components/tableTitle';
 
 export default {
-  name: 'Profile',
-  components: { UserCard, Activity, Timeline, Account },
+  components: {
+    tableTitle,//表格标题
+  },
   data() {
+    // 配置验证规则:用于表单验证
+    const validatePassword = (rule, value, callback) => {
+      if (value.length < 6) {
+        callback(new Error('密码不能低于6位!'))
+      } else {
+        callback()
+      }
+    }
     return {
-      user: {},
-      activeTab: 'activity'
+      tableDivTitle:"用户信息",
+      tableTitle:"修改密码",
+      user: {
+        avatar:"",
+        real_name:""
+      },
+      form:{
+        password:"",
+        new_password:"",
+        new_password1:""
+      },
+      capsTooltip1: false,//显示大小写提示
+      capsTooltip2: false,
+      capsTooltip3: false,
+      passwordType1: 'password',//密码域默认type 当显示密码的时候改为text
+      passwordType2: 'password',//密码域默认type 当显示密码的时候改为text
+      passwordType3: 'password',//密码域默认type 当显示密码的时候改为text
+      loginRules: { //配置from表单验证规则
+        password: [{ required: true, trigger: 'blur', validator: validatePassword }],
+        new_password: [{ required: true, trigger: 'blur', validator: validatePassword }],
+        new_password1: [{ required: true, trigger: 'blur', validator: validatePassword }]
+      }
     }
   },
-  computed: {
-    ...mapGetters([
-      'name',
-      'avatar',
-      'roles'
-    ])
-  },
-  created() {
-    this.getUser()
+  mounted() {
+    this.getUserInfo();
   },
   methods: {
-    getUser() {
-      this.user = {
-        name: this.name,
-        role: this.roles.join(' | '),
-        email: 'admin@test.com',
-        avatar: this.avatar
+    //获取用户身份信息
+    getUserInfo(){
+      this.$store.dispatch('public/getInfo').then(res=> {
+        console.log(res)
+        this.user.avatar = res.data.avatar;
+        this.user.real_name = res.data.real_name;
+
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '网络错误,请重试!'
+        });
+      })
+    },
+    //修改用户密码
+    changePassword(){
+      this.$store.dispatch('public/changePassword',this.form).then(res=> {
+        //console.log(res)
+        if(res.code == 200){
+          this.$message({
+            type: 'success',
+            message: "密码修改成功!"
+          });
+          this.clearInput();
+        }else{
+          this.$message({
+            type: 'warning',
+            message: res.message
+          });
+        } 
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '网络错误,请重试!'
+        });
+      })
+    },
+    // 切换密码框的显示与隐藏
+    showPwd(num) {
+      const passwordTypeKey = 'passwordType' + num; // 动态生成 passwordType 的键
+      const passwordRefKey = 'password' + num; // 动态生成 password 的引用
+
+      // 切换密码类型
+      if (this[passwordTypeKey] === 'password') {
+        this[passwordTypeKey] = ''; // 显示密码
+      } else {
+        this[passwordTypeKey] = 'password'; // 隐藏密码
+      }
+
+      // 使用 $nextTick 聚焦到对应的密码输入框
+      this.$nextTick(() => {
+        this.$refs[passwordRefKey].focus(); // 聚焦到对应的密码输入框
+      });
+    },
+    //清空输入列表
+    clearInput(){
+      this.form = {
+        password:"",
+        new_password:"",
+        new_password1:""
       }
     }
   }
 }
 </script>
+
+<style scoped lang="less">
+  @avatarBorderColor:#E1E2E9;
+  @spacingPx:30px;
+
+  .userInfoBox {
+    margin: @spacingPx;
+    border-radius: 20px;
+    background: #fff;
+    border: 1px solid #E9EDF7;
+    padding: @spacingPx - 10px;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    padding-bottom: @spacingPx;
+    .avatar {
+      border-radius: 50%;
+      width: 100px;
+      height: 100px;
+      border: 1px solid @avatarBorderColor;
+      border-radius: 12px;
+      padding:15px;
+    }
+    .show-pwd{
+      margin-left: @spacingPx;
+    }
+    .infoBox {
+      display: flex;
+      align-items: center;
+      margin-top: @spacingPx;
+    }
+    .infoTitle {
+      width:120px;
+      text-align: right;
+      margin-right: 10px;
+    }
+    .infoInput {
+      flex: 1;
+    }
+    .infoPassword {
+      display: flex;
+      align-items: center;
+    }
+  }
+
+  .inputBox {
+    margin-bottom: @spacingPx;
+    .inputIcon {
+      width: 24px;
+      height: 24px;
+      margin: 0 @spacingPx - 10px;
+    }
+    .inputIconSmall {
+      width: 18px;
+      height: 18px;
+    }
+  }
+  .PasswordBox {
+    display: flex;
+    align-items: center;
+    margin-top: @spacingPx;
+    .el-form-item {
+      flex: 1;
+    }
+    .PasswordTitle {
+      width:120px;
+      text-align: right;
+      margin-right: 10px;
+      margin-bottom:22px;
+    }
+    .PasswordBody {
+      flex: 1;
+      display: flex;
+      align-items: center;
+    }
+  }
+  .infoBtnBox {
+    margin-top: @spacingPx;
+    padding-bottom: @spacingPx;
+    text-align: center;
+  }
+</style>

+ 111 - 48
src/views/role/roleList.vue

@@ -3,7 +3,7 @@
     <!--搜索功能 start------------------------------------------------------------>
     <div class="layerBoxNoBg">
       <div>
-        <el-button type="primary" @click="addData()">添加角色</el-button>
+        <el-button type="primary" @click="openWindow()">添加角色</el-button>
       </div>
     </div>
     <!--搜索功能 end------------------------------------------------------------>
@@ -47,18 +47,19 @@
     <el-dialog title="添加角色" :visible.sync="windowStatus">
       <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
         <div class="formDiv">
-          <el-form-item label="角色名称:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+          <el-form-item label="角色名称:" :label-width="formLabelWidth" prop="role_name" class="custom-align-right">
             <el-input v-model="form.role_name" autocomplete="off"></el-input>
           </el-form-item>
-          <el-form-item label="职能描述:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+          <el-form-item label="职能描述:" :label-width="formLabelWidth" prop="remark" class="custom-align-right">
             <el-input type="textarea" v-model="form.remark" class="custom-textarea"></el-input>
           </el-form-item>
-          <el-form-item label="排序:" :label-width="formLabelWidth" prop="" class="custom-align-right">
+          <el-form-item label="排序:" :label-width="formLabelWidth" prop="sort" class="custom-align-right">
             <el-input v-model="form.sort" autocomplete="off"></el-input>
           </el-form-item>
           <el-form-item label="权限:" :label-width="formLabelWidth" prop="" class="custom-align-right">
             <div class="treeBox">
               <el-tree
+                ref="tree"
                 :data="roleData"
                 show-checkbox
                 node-key="id"
@@ -73,7 +74,8 @@
       <div slot="footer" class="dialog-footer">
         <div>
           <el-button @click="closeWindow">取 消</el-button>
-          <el-button type="primary" @click="editData">提交</el-button>
+          <el-button type="primary" @click="addData" v-if="editId==0">提交</el-button>
+          <el-button type="primary" @click="editData" v-else>修改</el-button>
         </div>
       </div>
     </el-dialog>
@@ -102,14 +104,6 @@ export default {
         callback()
       }
     }
-    const validateArray = (rule,value,callback) => {
-      if (value.length == 0) {
-        callback(new Error('该项不能为空!'))
-      } else {
-        callback()
-      }
-    }
-    let self = this;
     //0.全局操作 end ------------------------------------------------------------>
 
     return {
@@ -137,7 +131,7 @@ export default {
       //3.1 表单收集的数据
       form: {
         role_name:"",//角色名称
-        rule:[],//权
+        rule:[],//权
         remark:"",//职能描述
         sort:""//排序
       },
@@ -150,16 +144,12 @@ export default {
       },
       //3.2表单验证规则
       formRules: {
-        //性质不能为空
-        nature:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //进度不能为空
-        nature_level:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //类型不能为空
-        type:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //类型进度不能为空
-        type_level:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //状态不能为空
-        status:[{required:true,trigger:'blur',validator:validateEmpty}],
+        //角色名称不能为空
+        role_name:[{required:true,trigger:'blur',validator:validateEmpty}],
+        //职能描述不能为空
+        remark:[{required:true,trigger:'blur',validator:validateEmpty}],
+        //排序不能为空
+        sort:[{required:true,trigger:'blur',validator:validateEmpty}],
       },
       //弹出框中的表单设置 end ------------------------------------------------------------>
     }
@@ -192,8 +182,31 @@ export default {
       })  
     },
     //1.5 删除角色
-    deleteRow(data){
-      console.log(data)
+    deleteRow(id){
+      this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        console.log("当前删除:" + id)
+        this.$store.dispatch('userRole/delRole',{id:id}).then(res=> {
+          this.getData();
+          this.$message({
+            type: 'success',
+            message: '删除成功!'
+          });
+        }).catch(() => {
+          this.$message({
+            type: 'warning',
+            message: '网络错误,请重试!'
+          });
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '已取消删除'
+        });
+      });
     },
     //列表和分页相关 end ------------------------------------------------------------>
 
@@ -202,22 +215,59 @@ export default {
     openWindow() {
       this.clearToServe();
       this.windowStatus = true;
+      //this.$refs.form.clearValidate();
     },
     //2.2 关闭弹出框
     closeWindow(){
       this.windowStatus = false;
       this.clearToServe();
+      this.$refs.form.clearValidate();
     },
     //2.3 清空提交窗口
     clearToServe(){
       //重置窗口
       this.editId = "";
+      this.expandedKeys = [];
+      //this.checkedKeys = [];
+      this.$nextTick(() => {
+        //请空选中的节点
+        this.$refs.tree.setCheckedKeys([]);
+        //还原搜索的状态
+        this.$refs.tree.root.childNodes.forEach((e) => {
+          e.expanded = false;
+        });
+      });
+      this.form.role_name = "";
+      this.form.remark = "";
+      this.form.sort = "";
     },
     //弹出框设置 end ------------------------------------------------------------>
 
     //4.添加 start ------------------------------------------------------------>
     addData(){
       this.openWindow();
+      //获取选中的节点
+      let checkedArr = this.$refs.tree.getCheckedKeys();
+      this.form.rule = checkedArr;
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.$store.dispatch('userRole/addRole',this.form).then(res=> {
+            this.$message({
+              type: 'success',
+              message: '已成功添加角色!'
+            });
+            console.log(res)
+            this.closeWindow();
+            this.getData();
+          }).catch(() => {
+            this.$message({
+              type: 'info',
+              message: '网络错误,请重试!'
+            });
+          })
+        }
+      })
+
     },
     //添加 end ------------------------------------------------------------>
 
@@ -225,43 +275,56 @@ export default {
     //回显数据
     editRow(id){
       this.openWindow();
-     
+      //设置要编辑的id
+      this.editId = id;
       this.$store.dispatch('userRole/roleInfo',{id:id}).then(res=> {
         console.log(res)
+        this.$nextTick(() => {
+          //请空选中的节点
+          this.$refs.tree.setCheckedKeys([]);
+          //还原搜索的状态
+          this.$refs.tree.root.childNodes.forEach((e) => {
+            e.expanded = false;
+          });
+        });
+        //回显用户权限
         this.expandedKeys = res.data.rule;
         this.checkedKeys = res.data.rule;
+        //回显用户名称
+        this.form.role_name = res.data.role_name;
+        //回显职能描述
+        this.form.remark = res.data.remark;
+        //回显排序
+        this.form.sort = res.data.sort;
       }).catch(() => {
         this.$message({
           type: 'warning',
           message: '网络错误,请重试!'
         });
       })
-
     },
     //提交编辑
     editData(){
-      let data = {
-        id:this.editId,
-        
-      }
-
-      //console.log(data)
+      this.form.id = this.editId;
+      //获取选中的节点
+      let checkedArr = this.$refs.tree.getCheckedKeys();
+      this.form.rule = checkedArr;
       this.$refs.form.validate(valid => {
         if (valid) {
-          // this.$store.dispatch('complaint/upComplaint',data).then(res=> {
-          //   console.log(res)
-          //   this.closeWindow();
-          //   this.$message({
-          //     type: 'success',
-          //     message: '修改成功!'
-          //   });
-          //   this.getData();
-          // }).catch(() => {
-          //   this.$message({
-          //     type: 'warning',
-          //     message: '网络错误,请重试!'
-          //   });
-          // })
+          this.$store.dispatch('userRole/updateRole',this.form).then(res=> {
+            console.log(res)
+            this.closeWindow();
+            this.$message({
+              type: 'success',
+              message: '修改成功!'
+            });
+            this.getData();
+          }).catch(() => {
+            this.$message({
+              type: 'warning',
+              message: '网络错误,请重试!'
+            });
+          })
         }
       })
       

+ 135 - 511
src/views/role/userList.vue

@@ -6,46 +6,20 @@
         <el-row>
           <el-col :span="8">
             <div class="searchBox">
-              <div class="searchTitle">性质:</div>
-              <el-select v-model="getApiData.nature" placeholder="请选择..">
-                <el-option
-                  v-for="item in natureData"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value">
-                </el-option>
-              </el-select>
+              <div class="searchTitle">资讯题目:</div>
+              <el-input placeholder="请输入资讯题目" autocomplete="off" v-model="getApiData.title"/>
             </div>
           </el-col>
           <el-col :span="8">
             <div class="searchBox">
-              <div class="searchTitle">性质进度:</div>
-              <el-select v-model="getApiData.nature_level" placeholder="请选择">
-                <el-option-group
-                  v-for="group in netureLevelData"
-                  :key="group.id"
-                  :label="group.type_name">
-                  <el-option
-                    v-for="item in group.children"
-                    :key="item.id"
-                    :label="item.type_name"
-                    :value="item.id">
-                  </el-option>
-                </el-option-group>
-              </el-select>
+              <div class="searchTitle">导航池名称:</div>
+              <el-input placeholder="请输入导航池名称" autocomplete="off" v-model="getApiData.category_name"/>
             </div>
           </el-col>
           <el-col :span="8">
             <div class="searchBox">
-              <div class="searchTitle">类型:</div>
-              <el-select v-model="getApiData.type" placeholder="请选择..">
-                <el-option
-                  v-for="item in typeData"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value">
-                </el-option>
-              </el-select>
+              <div class="searchTitle">作者:</div>
+              <el-input placeholder="请输入作者姓名" autocomplete="off" v-model="getApiData.author"/>
             </div>
           </el-col>
         </el-row>
@@ -54,43 +28,33 @@
         <el-row>
           <el-col :span="8">
             <div class="searchBox">
-              <div class="searchTitle">类型进度:</div>
-              <el-select v-model="getApiData.type_level" placeholder="请选择">
-                <el-option-group
-                  v-for="group in typeLevelData"
-                  :key="group.id"
-                  :label="group.type_name">
-                  <el-option
-                    v-for="item in group.children"
-                    :key="item.id"
-                    :label="item.type_name"
-                    :value="item.id">
-                  </el-option>
-                </el-option-group>
+              <div class="searchTitle">引用外链:</div>
+              <el-select v-model="getApiData.islink" placeholder="请选择..">
+                <el-option label="否" value="0"></el-option>
+                <el-option label="是" value="1"></el-option>
               </el-select>
             </div>
           </el-col>
           <el-col :span="8">
             <div class="searchBox">
-              <div class="searchTitle">状态:</div>
+              <div class="searchTitle">资讯状态:</div>
               <el-select v-model="getApiData.status" placeholder="请选择..">
-                <el-option
-                  v-for="item in statusData"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value">
-                </el-option>
+                <el-option label="待发布" value="0"></el-option>
+                <el-option label="已发布" value="1"></el-option>
               </el-select>
             </div>
           </el-col>
         </el-row>
       </div>
     </div>
+    
     <div class="layerBoxNoBg">
-      <div></div>
+      <div>
+        <el-button type="primary" @click="goCreat">发布资讯</el-button>
+      </div>
       <div>
         <el-button @click="clearSearchList">重置</el-button>
-        <el-button type="primary" style="margin-right:20px" @click="getData()">搜索</el-button>
+        <el-button type="primary" @click="getData">搜索</el-button>
       </div>
     </div>
     <!--搜索功能 end------------------------------------------------------------>
@@ -102,24 +66,31 @@
         <template>
           <el-table :data="tableData" style="width: 100%">
             <el-table-column fixed prop="id" label="编号" width="50"></el-table-column>
-            <el-table-column prop="title" label="标题"></el-table-column>
-            <el-table-column prop="nature_name" label="性质"></el-table-column>
-            <el-table-column prop="nature_level_name" label="进度"></el-table-column>
-            <el-table-column prop="type_name" label="类型"></el-table-column>
-            <el-table-column prop="type_level_name" label="类型说明"></el-table-column>
-            <!-- <el-table-column prop="judgment" label="判决书"></el-table-column>
-            <el-table-column prop="audio_and_video" label="录音录像"></el-table-column>
-            <el-table-column prop="contract" label="合同"></el-table-column>
-            <el-table-column prop="qualifications" label="资质"></el-table-column> -->
-            <el-table-column prop="money" label="涉案标的额"></el-table-column>
-            <el-table-column prop="name" label="姓名"></el-table-column>
-            <el-table-column prop="mobile" label="电话"></el-table-column>
-            <el-table-column prop="status" label="状态"></el-table-column>
-            <el-table-column prop="created_at" label="创建时间"></el-table-column>
-            <el-table-column fixed="right" label="操作" width="120" header-align="center">
+            <el-table-column prop="title" label="资讯题目" width=""></el-table-column>
+            <el-table-column prop="category_name" label="导航池名称" width=""></el-table-column>
+            <el-table-column prop="status" label="状态" width="">
+              <template slot-scope="scope">
+                <span v-if="scope.row.status==404">404</span>
+                <el-switch
+                  v-else
+                  v-model="scope.row.status"
+                  :active-value="1"
+                  :inactive-value="0"
+                  @change="upRow(scope.row.id,scope.row.status)"
+                ></el-switch>
+              </template>
+            </el-table-column>
+            <el-table-column prop="islink" label="是否引用外链" width=""></el-table-column>
+            <el-table-column prop="fromurl" label="来源" width=""></el-table-column>
+            <el-table-column prop="author" label="作者" width=""></el-table-column>
+            <el-table-column prop="level" label="排序" width=""></el-table-column>
+            <el-table-column prop="created_at" label="创建时间" width=""></el-table-column>
+            <el-table-column prop="updated_at" label="修改时间" width=""></el-table-column>
+            <el-table-column fixed="right" label="操作" width="200" header-align="center">
               <template slot-scope="scope">
                 <div class="listBtnBox">
-                  <div class="listEditBtn" @click="editRow(scope.row)"><i class="el-icon-edit-outline"></i>编辑</div>
+                  <div class="listDeleteBtn" @click="deleteRow(scope.row.id, tableData)"><i class="el-icon-delete"></i>移除</div>
+                  <div class="listEditBtn" @click="goEdit(scope.row.id, tableData)"><i class="el-icon-edit-outline"></i>编辑</div>
                 </div>
               </template>
             </el-table-column>
@@ -127,7 +98,6 @@
         </template>
       </el-row>
     </div>
-
     <!--分页 start------------------------------------------------------------>
     <div class="alignBox">
       <el-row>
@@ -138,352 +108,128 @@
     </div>
     <!--分页 end------------------------------------------------------------>
     <!--表格内容 end------------------------------------------------------------>
-
-    <!--弹出框start------------------------------------------------------------>
-    <el-dialog title="编辑投诉" :visible.sync="windowStatus">
-      <el-form :model="form" ref="form" :rules="formRules" autocomplete="off" label-position="left">
-        <div class="formDiv">
-          <el-form-item label="标题:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.title" autocomplete="off" disabled></el-input>
-          </el-form-item>
-          <el-form-item label="性质:" :label-width="formLabelWidth" prop="nature" class="custom-align-right">
-            <div class="formLabelFloatBox">
-              <el-select v-model="form.nature" placeholder="请选择..">
-                <el-option
-                  v-for="item in windowNatureData"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value">
-                </el-option>
-              </el-select>
-            </div>
-          </el-form-item>
-          <el-form-item label="性质进度:" :label-width="formLabelWidth" prop="nature_level" class="custom-align-right">
-            <el-select v-model="form.nature_level" placeholder="请选择">
-              <el-option-group
-                v-for="group in windowNetureLevelData"
-                :key="group.id"
-                :label="group.type_name">
-                <el-option
-                  v-for="item in group.children"
-                  :key="item.id"
-                  :label="item.type_name"
-                  :value="item.id">
-                </el-option>
-              </el-option-group>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="类型:" :label-width="formLabelWidth" prop="type" class="custom-align-right">
-            <el-select v-model="form.type" placeholder="请选择..">
-              <el-option
-                v-for="item in typeData"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value">
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="类型进度:" :label-width="formLabelWidth" prop="type_level" class="custom-align-right">
-            <el-select v-model="form.type_level" placeholder="请选择">
-              <el-option-group
-                v-for="group in windowTypeLevelData"
-                :key="group.id"
-                :label="group.type_name">
-                <el-option
-                  v-for="item in group.children"
-                  :key="item.id"
-                  :label="item.type_name"
-                  :value="item.id">
-                </el-option>
-              </el-option-group>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="详细说明:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input type="textarea" v-model="form.describe" class="custom-textarea" disabled></el-input>
-          </el-form-item>
-          <el-form-item label="判决书:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <a v-if="form.judgment" :href="form.judgment" class="complaintListdownloadBtn" download>
-              <i class="el-icon-download"></i>
-              下载
-            </a>
-            <div v-else>暂无数据</div>
-          </el-form-item>
-          <el-form-item label="录音录像:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <a v-if="form.audio_and_video" :href="form.judgment" class="complaintListdownloadBtn" download>
-              <i class="el-icon-download"></i>
-              下载
-            </a>
-            <div v-else>暂无数据</div>
-          </el-form-item>
-          <el-form-item label="合同:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <a v-if="form.contract" :href="form.contract" class="complaintListdownloadBtn" download>
-              <i class="el-icon-download"></i>
-              下载
-            </a>
-            <div v-else>暂无数据</div>
-          </el-form-item>
-          <el-form-item label="资质:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <a v-if="form.qualifications" :href="form.qualifications" class="complaintListdownloadBtn" download>
-              <i class="el-icon-download"></i>
-              下载
-            </a>
-            <div v-else>暂无数据</div>
-          </el-form-item>
-          <el-form-item label="涉案标的金额:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.money" autocomplete="off" disabled></el-input>
-          </el-form-item>
-          <el-form-item label="姓名:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.name" autocomplete="off" disabled></el-input>
-          </el-form-item>
-          <el-form-item label="身份证号:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.id_card" autocomplete="off" disabled></el-input>
-          </el-form-item>
-          <el-form-item label="期待学习法律:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input v-model="form.like_remark" autocomplete="off" disabled></el-input>
-          </el-form-item>
-          <el-form-item label="状态:" :label-width="formLabelWidth" prop="status" class="custom-align-right">
-            <el-radio-group v-model="form.status">
-              <el-radio label="100">待审核</el-radio>
-              <el-radio label="101">已接案</el-radio>
-              <el-radio label="102">已拒绝</el-radio>
-              <el-radio label="103">已完结</el-radio>
-            </el-radio-group>
-          </el-form-item>
-          <el-form-item label="备注信息:" :label-width="formLabelWidth" prop="" class="custom-align-right">
-            <el-input type="textarea" v-model="form.reason" class="custom-textarea"></el-input>
-          </el-form-item>
-        </div>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <div>
-          <el-button @click="closeWindow">取 消</el-button>
-          <el-button type="primary" @click="editData">提交</el-button>
-        </div>
-      </div>
-    </el-dialog>
-    <!--弹出框2:外部表单弹出框 end------------------------------------------------------------>
-
-
   </div>
 </template>
 
 <script>
-//引入公用样式
-import '@/styles/global.less';
 //表格标题
 import tableTitle from './components/tableTitle';
+//引入公用样式
+import '@/styles/global.less';
 
 export default {
   components: {
     tableTitle,//表格标题
   },
   data() {
-    //0.全局操作 start ------------------------------------------------------------>
-    //表单验证
-    const validateEmpty = (rule,value,callback) => {
-      if (value.length == 0) {
-        callback(new Error('该项不能为空!'))
-      } else {
-        callback()
-      }
-    }
-    const validateArray = (rule,value,callback) => {
-      if (value.length == 0) {
-        callback(new Error('该项不能为空!'))
-      } else {
-        callback()
-      }
-    }
-    let self = this;
-    //0.全局操作 end ------------------------------------------------------------>
-
     return {
       //1.列表和分页相关 start ------------------------------------------------------------>
-      tableDivTitle:"投诉举报",
-      tableData: [],//列表
-      allCount:0,//总条数
+      tableDivTitle:"资讯列表",
+      tableData:[],//内容
       editId:0,//要修改的网站id
       getApiData:{
-        is_admin:1,//是否为管理员
-        nature:"",//性质
-        nature_level:"",//性质进度
-        type:"",//类型
-        type_level:"",//类型进度
-        status:"",//状态 
+        title:"",//标题
+        category_name:"",//导航池id
+        author:"",//作者
+        islink:"",//是否使用外链
+        status:"",//资讯状态
         page:1,//当前是第几页
         pageSize:10,//一共多少条
       },
-      natureData:[],//所有性质
-      netureLevelData:[],//所有进度
-      typeData:[],//所有类型
-      typeLevelData:[],//所有类型进度
-      statusData:[],//所有状态 
+      allCount:0,//总条数
       //分页相关 end ------------------------------------------------------------>
-
-      //2.弹出框设置 start ------------------------------------------------------------>
-      //是否显示弹出窗口
-      windowStatus:false,
-      formLabelWidth: '120px',
-      //弹出框设置 end ------------------------------------------------------------>
-
-      //3.搜索相关 start ------------------------------------------------------------>
-      //搜索相关 end ------------------------------------------------------------>
-
-      //3.弹出框中的表单设置 start ------------------------------------------------------------>
-      //3.1 表单收集的数据
-      form: {
-        title:"",//标题
-        nature:"",//性质
-        nature_level:"",//进度
-        type:"",//类型
-        type_level:"",//类型进度
-        describe:"",//详细说明
-        judgment:"",//判决书
-        audio_and_video:"",//录音录像
-        contract:"",//合同
-        qualifications:"",//资质
-        money:"",//涉案标的额
-        name:"",//姓名
-        id_card:"",//身份证
-        status:"100",//状态
-        like_remark:"",//你最想了解的法律知识
-        reason:"",//备注信息
-      },
-      windowNatureData:[],//所有性质
-      windowNetureLevelData:[],//所有进度
-      windowTypeData:[],//所有类型
-      windowTypeLevelData:[],//所有类型进度
-      windowStatusData:[],//所有状态 
-      //3.2表单验证规则
-      formRules: {
-        //性质不能为空
-        nature:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //进度不能为空
-        nature_level:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //类型不能为空
-        type:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //类型进度不能为空
-        type_level:[{required:true,trigger:'blur',validator:validateEmpty}],
-        //状态不能为空
-        status:[{required:true,trigger:'blur',validator:validateEmpty}],
-      },
-      //弹出框中的表单设置 end ------------------------------------------------------------>
     }
   },
   methods: {
     //1.列表和分页相关 start ------------------------------------------------------------>
-    //1.1 获取内容
+    //1.1 开始请求列表信息方法
     getData(){
-      this.$store.dispatch('complaint/getComplaint',this.getApiData).then(res=> {
-        console.log(res)
+      this.$store.dispatch('news/getArticleList',this.getApiData).then(res=> {
+        //格式化:islink=0为不使用外面 islink=1为使用外链
+        //status=1为显示 status=2为不显示
         let data = [];
         for(let item of res.data.rows){
-          // item.judgment = item.judgment.length > 0 ? "有" : "没有";
-          // item.audio_and_video = item.audio_and_video.length > 0 ? "有" : "没有";
-          // item.contract = item.contract.length > 0 ? "有" : "没有";
-          // item.qualifications = item.qualifications.length > 0 ? "有" : "没有";
-
-          // 判断 item.status 的状态
-          switch (item.status) {
-            case 100:
-              item.status = "待审核";
-              break;
-            case 101:
-              item.status = "已接案";
-              break;
-            case 102:
-              item.status = "已拒绝";
-              break;
-            case 103:
-              item.status = "已完结";
-              break;
-            default:
-              item.status = "未知状态"; // 可选:处理未定义的状态
-              break;
-          }
+          // if(item.status==0){item.status="隐藏"}
+          // if(item.status==1){item.status="显示"}
+          // if(item.status==404){item.status="已删除"}
+          if(item.islink==0){item.islink="否"}
+          if(item.islink==1){item.islink="是"}
+          data.push(item)
         }
-        this.tableData = res.data.rows;//放入数据
-        this.allCount = res.data.count;//放入总条数
+        this.tableData = res.data.rows; //给与内容
+        this.allCount = res.data.count; //给与总条数
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '网络错误,请重试!'
+        });
       })
     },
-    //获取所有状态
-    getStatus(){
-      //获取性质和进度
-      let getNature = {
-        type:1
-      }
-      this.$store.dispatch('complaint/getLetterType',getNature).then(res=> {
-        //格式化性质
-        for(let item of res.data){
-          let data = {
-            value: item.id,
-            label: item.type_name
-          }
-          //搜索栏
-          this.natureData.push(data)
-          //弹窗框
-          this.windowNatureData.push(data)
-        }
-        //把进度放进去 无需格式化
-        this.netureLevelData = res.data;
-        //弹窗框
-        this.windowNetureLevelData = res.data;
-      })
-      
-      //获取类型和类型说明
-      let getType = {
-        type:2
-      }
-      this.$store.dispatch('complaint/getLetterType',getType).then(res=> {
-        for(let item of res.data){
-          let data = {
-            value: item.id,
-            label: item.type_name
-          }
-          //搜索栏
-          this.typeData.push(data)
-          //弹窗框
-          this.windowTypeData.push(data)
-        }
-        //搜索栏
-        this.typeLevelData = res.data;
-        //弹窗框
-        this.windowTypeLevelData = res.data;
-      })
-      let getStatus = {
-        type:10
+    //1.2 删除内容
+    deleteRow(id){
+      this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        console.log("当前删除:" + id)
+        this.$store.dispatch('news/delArticle',{id:id}).then(res=> {
+          this.getData();
+          this.$message({
+            type: 'success',
+            message: '删除成功!'
+          });
+        }).catch(() => {
+          this.$message({
+            type: 'warning',
+            message: '网络错误,请重试!'
+          });
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '已取消删除'
+        });
+      });
+    },
+    //1.3 修改网站状态
+    upRow(id,status){
+      let data = {
+        id:id,
+        status:status
       }
-      this.$store.dispatch('complaint/getLetterType',getStatus).then(res=> {
-        for(let item of res.data){
-          let data = {
-            value: item.id,
-            label: item.type_name
-          }
-          //搜索栏  
-          this.statusData.push(data)
-          //弹窗框
-          this.windowStatusData.push(data)
+      this.$store.dispatch('news/upArticleStatus',data).then(res=> {
+        if(res.code==200){
+          this.$message({
+            type: 'success',
+            message: '资讯状态已修改!'
+          });
         }
-      })
+      }).catch(() => {
+        this.$message({
+          type: 'warning',
+          message: '已取消删除'
+        });
+      });
     },
-    //1.2 列表内容分页
+    //1.4 列表内容分页
     //直接跳转
     handleSizeChange(val) {
       this.getApiData.page = val;
       this.getData();
     },
-    //1.3 点击分页
+    //1.5 点击分页
     handleCurrentChange(val) {
       this.getApiData.page = val;
       this.getData();
     },
-    //1.4 重置按钮
+    //1.6 重置按钮
     clearSearchList(){
-      this.getApiData.is_admin = 1;
-      this.getApiData.nature = "";
-      this.getApiData.nature_level = "";
-      this.getApiData.type = "";
-      this.getApiData.type_level = "";
+      this.tableData = [];
+      this.getApiData.title = "";
+      this.getApiData.category_name = "";
+      this.getApiData.author = "";
+      this.getApiData.islink = "";
       this.getApiData.status = "";
       this.getApiData.page = 1;
       this.getApiData.pageSize = 10;
@@ -491,153 +237,31 @@ export default {
     },
     //列表和分页相关 end ------------------------------------------------------------>
 
-    //2.弹出框设置 start ------------------------------------------------------------>
-    //2.1 打开弹出框
-    openWindow() {
-      this.clearToServe();
-      this.windowStatus = true;
+    //2.添加新闻 start ------------------------------------------------------------>
+    //跳转到资讯发布页面
+    goCreat(){
+      this.$router.push({
+        path: '/creatNews',
+      });
     },
-    //2.2 关闭弹出框
-    closeWindow(){
-      this.windowStatus = false;
-      this.clearToServe();
-    },
-    //2.3 清空提交窗口
-    clearToServe(){
-      //重置窗口
-      this.editId = "";
-      this.form.status = "100"; // 重置状态为默认值
-    },
-    //弹出框设置 end ------------------------------------------------------------>
-
-
-    //4.编辑 start ------------------------------------------------------------>
-    //回显数据
-    editRow(data){
-      //先判断这条数据是否已经被其他人受理
-      this.$store.dispatch('complaint/checkMeasure',{id:data.id}).then(res=> {
-        if(res.code == 200){
-          //列表里面已经有了,就不需要再请求了
-          //开始回显数据
-          this.openWindow();
-          console.log(data)
-          this.editId = data.id;
-          this.form.title = data.title;
-          this.form.nature = data.nature;
-          this.form.nature_level = data.nature_level;
-          this.form.type = data.type;
-          this.form.type_level = data.type_level;
-          this.form.describe = data.describe;
-          if(data.judgment.length > 0){
-            this.form.judgment = data.judgment[0].fileSrc;
-          }
-          if(data.audio_and_video.length > 0){
-            this.form.audio_and_video = data.audio_and_video[0].fileSrc;
-          }
-          if(data.contract.length > 0){
-            this.form.contract = data.contract[0].fileSrc;
-          }
-          if(data.qualifications.length > 0){
-            this.form.qualifications = data.qualifications[0].fileSrc;
-          }
-          this.form.money = data.money;
-          this.form.id_card = data.id_card;
-          this.form.like_remark = data.like_remark;
-          this.form.reason = data.reason;
-          switch (data.status) {
-            case "待审核":
-            this.form.status = "100";
-              break;
-            case "已接案":
-            this.form.status = "101";
-              break;
-            case "已拒绝":
-              this.form.status = "102";
-              break;
-            case "已完结":
-              this.form.status = "103";
-              break;
-            default:
-              this.form.status = "0"; // 可选:处理未定义的状态
-              break;
-          }
-          console.log(this.form.status) //100
-          this.form.name = data.name;
-
-        }else{
-          this.$message({
-            type: 'warning',
-            message: '该数据已经被其他人受理!'
-          });
-        }
-      }).catch(() => {
-        this.$message({
-          type: 'warning',
-          message: '网络错误,请重试!'
-        });
-      })
-
-    },
-    //提交编辑
-    editData(){
+    goEdit(id){
       let data = {
-        id:this.editId,
-        nature:this.form.nature,
-        nature_level:this.form.nature_level,
-        type:this.form.type,
-        type_level:this.form.type_level,
-        status:this.form.status,
-        reason:this.form.reason
+        id:id
       }
-
-      //console.log(data)
-      this.$refs.form.validate(valid => {
-        if (valid) {
-          this.$store.dispatch('complaint/upComplaint',data).then(res=> {
-            console.log(res)
-            this.closeWindow();
-            this.$message({
-              type: 'success',
-              message: '修改成功!'
-            });
-            this.getData();
-          }).catch(() => {
-            this.$message({
-              type: 'warning',
-              message: '网络错误,请重试!'
-            });
-          })
-        }
-      })
-      
+      this.$router.push({
+        path: '/creatNews',
+        query: data
+      });
     }
-    //编辑 end ------------------------------------------------------------>
-
+    //添加新闻 end ------------------------------------------------------------>
   },
   mounted(){
-    //获取页面列表
+    //1.获得初始数据
     this.getData();
-    //查询状态
-    this.getStatus();
   }
 }
 </script>
 
 <style scoped lang="less">
-//表单微调 start------------------------------------------------------------>*/
-::v-deep .custom-form-item > .el-form-item__label {
-  line-height: 140px !important;
-}
-::v-deep .custom-textarea .el-textarea__inner {
-  resize: none; /* 禁止用拖拽调整大小 */
-}
-::v-deep .custom-align-right .el-form-item__label {
-  text-align: right; /* 设置标签文字右对齐 */
-}
-::v-deep .el-select-group__title {
-  color: #909399;
-}
-::v-deep .el-select {
-  width: 100% !important;
-}
+
 </style>

+ 1 - 1
src/views/website/categoryList.vue

@@ -231,7 +231,7 @@ export default {
           let parames = {
             'pid':parentId
           }
-          self.$store.dispatch('pool/getDepartment',parames).then(res=> {
+          self.$store.dispatch('public/getAllDepartment',parames).then(res=> {
             if (res.data) {
               const nodes = res.data.map(item => ({
                 value: item.id,