Explorar o código

Merge branch 'master' of http://git.cc-lotus.info/count/webnew-count

wuhongyu %!s(int64=5) %!d(string=hai) anos
pai
achega
f081ae0d27

+ 8 - 0
src/router/index.js

@@ -80,8 +80,16 @@ const routes = [
   {
     path: '/partisan/index',
     name: '党建学苑',
+    meta: { title: '党建学苑', subSite: true },
     component: () => import('../views/partisan/index.vue'),
   },
+  // 党建学苑-列表详情
+  {
+    path: '/partisan/listDetail',
+    name: '党建学苑',
+    meta: { title: '党建学苑', subSite: true },
+    component: () => import('../views/partisan/listDetail.vue'),
+  },
   // 个人中心
   {
     path: '/pcenter/index',

+ 2 - 2
src/store/login.js

@@ -56,9 +56,9 @@ const actions = {
     // const res = await this.$axios.$post(api.logout, { key: key });
     // commit('deleteUser');
   },
-  async update({ commit }, payload) {
+  async uppasswd({ commit }, payload) {
     let res = await this.$axios.$post(`${api.updatePassword}`, {
-      data: payload,
+      ...payload,
     });
     return res;
   },

+ 39 - 7
src/views/partisan/index.vue

@@ -15,29 +15,61 @@
         <div class="w_1200">
           <el-col :span="24" class="images">
             <el-carousel indicator-position="outside" height="380px" width="590px">
-              <el-carousel-item v-for="(item, index) in ruleList" :key="index" class="ruleList">
+              <el-carousel-item
+                v-for="(item, index) in ruleList"
+                :key="index"
+                @click.native="$router.push({ path: '/partisan/listDetail', query: { col_name: '图片新闻', id: 'id', display: '1' } })"
+                class="ruleList"
+              >
                 <el-image :src="item.img_url"></el-image>
                 <p class="textOver">{{ item.title }}</p>
               </el-carousel-item>
             </el-carousel>
           </el-col>
           <el-col :span="12" class="right">
-            <el-col :span="24" class="infoTop"> <span>|</span><span>党建工作</span><span>MORE</span> </el-col>
-            <el-col :span="24" class="info" v-for="(item, index) in workList" :key="index">
+            <el-col :span="24" class="infoTop">
+              <span>|</span><span>党建工作</span
+              ><span @click="$router.push({ path: '/partisan/listDetail', query: { col_name: '党建工作', display: '0' } })">MORE</span>
+            </el-col>
+            <el-col
+              :span="24"
+              class="info"
+              v-for="(item, index) in workList"
+              :key="index"
+              @click.native="$router.push({ path: '/partisan/listDetail', query: { col_name: '党建工作', id: 'id', display: '1' } })"
+            >
               <span></span><span class="textOver">{{ item.title }}</span
               ><span>{{ item.publish_time }}</span>
             </el-col>
           </el-col>
           <el-col :span="12" class="left">
-            <el-col :span="24" class="infoTop"> <span>|</span><span>学习园地</span><span>MORE</span> </el-col>
-            <el-col :span="24" class="info" v-for="(item, index) in stuList" :key="index">
+            <el-col :span="24" class="infoTop">
+              <span>|</span><span>学习园地</span
+              ><span @click="$router.push({ path: '/partisan/listDetail', query: { col_name: '学习园地', display: '0' } })">MORE</span>
+            </el-col>
+            <el-col
+              :span="24"
+              class="info"
+              v-for="(item, index) in stuList"
+              :key="index"
+              @click.native="$router.push({ path: '/partisan/listDetail', query: { col_name: '学习园地', id: 'id', display: '1' } })"
+            >
               <span></span><span class="textOver">{{ item.title }}</span
               ><span>{{ item.publish_time }}</span>
             </el-col>
           </el-col>
           <el-col :span="12" class="right">
-            <el-col :span="24" class="infoTop"> <span>|</span><span>党风廉政</span><span>MORE</span> </el-col>
-            <el-col :span="24" class="info" v-for="(item, index) in politicsList" :key="index">
+            <el-col :span="24" class="infoTop">
+              <span>|</span><span>党风廉政</span
+              ><span @click="$router.push({ path: '/partisan/listDetail', query: { col_name: '党风廉政', display: '0' } })">MORE</span>
+            </el-col>
+            <el-col
+              :span="24"
+              class="info"
+              v-for="(item, index) in politicsList"
+              :key="index"
+              @click.native="$router.push({ path: '/partisan/listDetail', query: { col_name: '党风廉政', id: 'id', display: '1' } })"
+            >
               <span></span><span class="textOver">{{ item.title }}</span
               ><span>{{ item.publish_time }}</span>
             </el-col>

+ 224 - 0
src/views/partisan/listDetail.vue

@@ -0,0 +1,224 @@
+<template>
+  <div id="listDetail">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top></top>
+        </el-col>
+        <el-col :span="24" class="menu">
+          <div class="w_1200">
+            <menus></menus>
+          </div>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="5" class="left">
+              <el-col :span="24" class="top">
+                <i class="el-icon-s-unfold"></i>
+                <span>党建学苑</span>
+              </el-col>
+              <el-col :span="24" class="menu">
+                <el-col class="menuList" :span="24" v-for="(item, index) in menuList" :key="index">
+                  <p @click="changeMenu(item.name, index)" :style="`color:${menuIndex == index ? menuColor : ''}`">
+                    {{ item.name }}
+                  </p>
+                </el-col>
+              </el-col>
+            </el-col>
+            <el-col :span="18" class="right">
+              <span v-if="displays == '0'">
+                <el-col :span="24" class="one">
+                  <span></span>
+                  <span>{{ columnName }}</span>
+                </el-col>
+                <el-col :span="24" class="list">
+                  <newsList :list="list" :total="total" @detailBtn="detailBtn"></newsList>
+                </el-col>
+              </span>
+              <span v-else>
+                <newsDetail :details="details"></newsDetail>
+              </span>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24" class="foot">
+          <div class="w_1200">
+            <foot></foot>
+          </div>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/top.vue';
+import menus from '@/layout/common/menus.vue';
+import foot from '@/layout/common/foot.vue';
+import newsList from './parts/newsList.vue';
+import newsDetail from './parts/newsDetail.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'listDetail',
+  props: {},
+  components: {
+    top,
+    menus,
+    foot,
+    newsList,
+    newsDetail,
+  },
+  data: function() {
+    return {
+      menuList: [{ name: '图片新闻' }, { name: '党建工作' }, { name: '学习园地' }, { name: '党风廉政' }],
+      menuColor: 'rgb(5,73,130)',
+      menuIndex: '0',
+      columnName: '',
+      displays: '0',
+      // 列表
+      list: [
+        {
+          title: '标题',
+          date: '2020-02-02',
+        },
+        {
+          title: '十四数据',
+          date: '2020-02-02',
+        },
+      ],
+      // 总数
+      total: 10,
+      // 详情
+      details: {
+        title: '信息标题',
+        source: '信息部',
+        date: '2020-02-02',
+        content: '信息内容',
+      },
+    };
+  },
+  created() {
+    this.changeColumn();
+  },
+  methods: {
+    // 选择栏目
+    changeColumn() {
+      if (this.col_name == '图片新闻') {
+        this.menuIndex = 0;
+        this.columnName = this.col_name;
+        this.menuColor = 'rgb(5,73,130)';
+        this.$set(this, `displays`, this.display);
+      } else if (this.col_name == '党建工作') {
+        this.menuIndex = 1;
+        this.columnName = this.col_name;
+        this.menuColor = 'rgb(5,73,130)';
+        this.$set(this, `displays`, this.display);
+      } else if (this.col_name == '学习园地') {
+        this.menuIndex = 2;
+        this.columnName = this.col_name;
+        this.menuColor = 'rgb(5,73,130)';
+        this.$set(this, `displays`, this.display);
+      } else if (this.col_name == '党风廉政') {
+        this.menuIndex = 3;
+        this.columnName = this.col_name;
+        this.menuColor = 'rgb(5,73,130)';
+        this.$set(this, `displays`, this.display);
+      }
+    },
+    // 点击选择菜单
+    changeMenu(name, index) {
+      this.menuIndex = index;
+      this.columnName = name;
+      this.menuColor = 'rgb(5,73,130)';
+      this.$set(this, `displays`, 0);
+    },
+    // 点击详情
+    detailBtn(id) {
+      this.$set(this, `displays`, 1);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    display() {
+      return this.$route.query.display;
+    },
+    col_name() {
+      return this.$route.query.col_name;
+    },
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.style {
+  .menu {
+    height: 70px;
+    margin: 0 0 10px 0;
+  }
+  .main {
+    min-height: 600px;
+    margin: 0 0 10px 0;
+    .left {
+      min-height: 600px;
+      background: #fff;
+      margin: 0 10px 0 0;
+      .top {
+        height: 60px;
+        line-height: 60px;
+        background-color: #054982;
+        color: #fff;
+        font-size: 25px;
+        font-weight: 600;
+        letter-spacing: 2px;
+        text-align: center;
+      }
+      .menuList {
+        height: 50px;
+        line-height: 50px;
+        text-align: center;
+        border-bottom: 1px solid #ccc;
+        p {
+          font-size: 20px;
+          font-weight: bold;
+        }
+      }
+    }
+    .right {
+      width: 78%;
+      min-height: 600px;
+      background: #fff;
+      padding: 0 20px;
+      .one {
+        height: 35px;
+        margin: 20px 0;
+        border-bottom: 1px dashed #ccc;
+        span:first-child {
+          display: inline-block;
+          width: 4px;
+          height: 20px;
+          background: #005293;
+          margin: 0 10px -3px 0;
+        }
+        span:nth-child(2) {
+          font-size: 20px;
+          color: #005293;
+          font-weight: bold;
+        }
+      }
+    }
+  }
+  .foot {
+    height: 135px;
+  }
+}
+</style>

+ 60 - 0
src/views/partisan/parts/newsDetail.vue

@@ -0,0 +1,60 @@
+<template>
+  <div id="newsDetail">
+    <el-row>
+      <el-col :span="24" class="info">
+        <h3>{{ details.title }}</h3>
+        <div>
+          <span>文章来源:{{ details.source }}</span>
+          <span>时间:{{ details.date }}</span>
+        </div>
+        <p>{{ details.content }}</p>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'newsDetail',
+  props: {
+    details: null,
+  },
+  components: {},
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  padding: 20px 0;
+  h3 {
+    font-size: 24px;
+    color: #005293;
+    text-align: center;
+  }
+  div {
+    text-align: center;
+    border-bottom: 1px solid #ccc;
+    padding: 0 0 40px 0;
+    margin: 0 0 20px 0;
+    span {
+      color: #666666;
+      padding: 0 10px;
+    }
+  }
+}
+</style>

+ 83 - 0
src/views/partisan/parts/newsList.vue

@@ -0,0 +1,83 @@
+<template>
+  <div id="newsList">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="list" @click.native="detailBtn(item.id)" v-for="(item, index) in list" :key="index">
+          <span></span>
+          <span class="textOver">{{ item.title }}</span>
+          <span>{{ item.date }}</span>
+        </el-col>
+        <el-col :span="24" class="page">
+          <pagination :total="total"></pagination>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import pagination from '@/components/pagination.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'newsList',
+  props: {
+    list: null,
+    total: null,
+  },
+  components: {
+    pagination,
+  },
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {
+    detailBtn(id) {
+      this.$emit('detailBtn', id);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  .list {
+    padding: 0 0 7px 0;
+    span:first-child {
+      display: inline-block;
+      width: 4px;
+      height: 4px;
+      background: #ccc;
+      margin: 0px 10px 7px 0px;
+    }
+    span:nth-child(2) {
+      display: inline-block;
+      font-size: 16px;
+      color: #555555;
+      font-family: '微软雅黑';
+      width: 85%;
+      margin: 0 30px 0 0;
+    }
+    span:last-child {
+      display: inline-block;
+      width: 90px;
+      font-size: 16px;
+      color: #a8abb7;
+      font-family: '微软雅黑';
+      text-align: right;
+    }
+  }
+  .page {
+    height: 50px;
+  }
+}
+</style>

+ 19 - 0
src/views/pcenter/demand.vue

@@ -0,0 +1,19 @@
+<template>
+  <div id="demand">
+    <p>demand</p>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'demand',
+  props: {},
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped></style>

+ 9 - 1
src/views/pcenter/index.vue

@@ -69,9 +69,13 @@
               </span>
               <span v-else-if="columnName == '需求管理'">
                 <el-col :span="24" class="infoTop"> <span>|</span><span>需求管理</span> </el-col>
+                <demand></demand>
               </span>
               <span v-else-if="columnName == '信息管理'">
-                <el-col :span="24" class="infoTop"> <span>|</span><span>信息管理</span> </el-col>
+                <el-col :span="24" class="infoTop" style="margin-bottom:0;"> <span>|</span><span>信息管理</span> </el-col>
+                <el-col :span="24">
+                  <infoAdmin></infoAdmin>
+                </el-col>
               </span>
               <span v-else-if="columnName == '人员管理'">
                 <el-col :span="24" class="infoTop"> <span>|</span><span>人员管理</span> </el-col>
@@ -105,6 +109,8 @@
 <script>
 import top from '@/layout/common/top.vue';
 import foot from '@/layout/common/foot.vue';
+import infoAdmin from './parts/infoAdmin.vue';
+import demand from '@/views/pcenter/demand.vue';
 import pinfo from '@/views/pcenter/pinfo.vue';
 import uppasswd from '@/views/pcenter/uppasswd.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
@@ -115,8 +121,10 @@ export default {
   components: {
     top,
     foot,
+    infoAdmin, //信息管理
     pinfo,
     uppasswd,
+    demand,
   },
   data: function() {
     return {

+ 160 - 0
src/views/pcenter/parts/infoAdmin.vue

@@ -0,0 +1,160 @@
+<template>
+  <div id="infoAdmin">
+    <el-row>
+      <el-col :span="24" class="style">
+        <span v-if="display == 'list'">
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="add">添加</el-button>
+          </el-col>
+          <el-col :span="24" class="list">
+            <el-table :data="list" stripe style="width: 100%" border>
+              <el-table-column prop="title" label="标题" align="center"> </el-table-column>
+              <el-table-column prop="publish_time" label="发布时间" align="center"> </el-table-column>
+              <el-table-column prop="publish_unit" label="发布单位" align="center"> </el-table-column>
+              <el-table-column prop="publisher" label="发布人" align="center"> </el-table-column>
+              <el-table-column label="状态" align="center">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.status == '0' ? '草稿' : scope.row.status == '1' ? '审核中' : scope.row.status == '2' ? '审核通过' : '未识别' }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center">
+                <template slot-scope="">
+                  <el-button size="mini" type="primary">编辑</el-button>
+                  <el-button size="mini" type="success">发布</el-button>
+                  <el-button size="mini" type="danger">删除</el-button>
+                  <!-- <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
+                  <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button> -->
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-col>
+        </span>
+        <span v-else>
+          <el-col :span="24" class="top">
+            <el-button type="primary" size="mini" @click="back">返回</el-button>
+          </el-col>
+          <el-col :span="24" class="form">
+            <el-form :model="form" :rules="rules" ref="form" label-width="100px" class="demo-ruleForm">
+              <el-form-item label="选择栏目" prop="col_name">
+                <el-select v-model="form.col_name" placeholder="请选择栏目">
+                  <el-option v-for="(item, index) in column_list" :key="index" :label="item.name" :value="item.name"></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="信息标题" prop="name">
+                <el-input v-model="form.name" placeholder="请输入信息标题"></el-input>
+              </el-form-item>
+              <el-col :span="24" style="text-align:center;">
+                <el-button type="primary" @click="submitDraft('form')">保存草稿</el-button>
+                <el-button type="success" @click="submitForm('form')">发布信息</el-button>
+                <el-button type="danger" @click="resetForm('form')">取消</el-button>
+              </el-col>
+            </el-form>
+          </el-col>
+        </span>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'infoAdmin',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      display: 'list',
+      // 列表
+      list: [],
+      // 选择栏目
+      column_list: [
+        { name: '科技资讯' },
+        { name: '技术前沿' },
+        { name: '工作动态' },
+        { name: '通知通告' },
+        { name: '平台建设' },
+        { name: '项目成果' },
+        { name: '知识产权' },
+        { name: '科技支撑' },
+        { name: '超算联盟' },
+        { name: '国家网格' },
+        { name: '教学中心' },
+        { name: '创业基地' },
+        { name: '软件中心' },
+        { name: '专题研讨' },
+        { name: '技术问答' },
+        { name: '行业研究' },
+        { name: '科技培训' },
+        { name: '图片新闻' },
+        { name: '党建工作' },
+        { name: '学习园地' },
+        { name: '党风廉政' },
+      ],
+      // 发布
+      form: {},
+      // 规则
+      rules: {
+        col_name: [{ required: true, message: '请选择栏目', trigger: 'blur' }],
+        name: [{ required: true, message: '请输入信息标题', trigger: 'blur' }],
+      },
+    };
+  },
+  created() {},
+  methods: {
+    // 添加
+    add() {
+      this.display = 'detail';
+    },
+    // 返回
+    back() {
+      this.display = 'list';
+    },
+    // 保存草稿
+    submitDraft(formName) {
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          alert(this.form);
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 提交
+    submitForm(formName) {
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          alert(this.form);
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 取消
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  padding: 0 20px;
+  .top {
+    text-align: right;
+    padding: 10px 0;
+  }
+}
+</style>

+ 36 - 5
src/views/pcenter/pinfo.vue

@@ -93,6 +93,9 @@ import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: staff } = createNamespacedHelpers('staff');
 const { mapActions: expert } = createNamespacedHelpers('expert');
 const { mapActions: user } = createNamespacedHelpers('user');
+const { mapActions: department } = createNamespacedHelpers('department');
+const { mapActions: level } = createNamespacedHelpers('level');
+const { mapActions: login } = createNamespacedHelpers('login');
 export default {
   name: 'pinfo',
   props: {},
@@ -128,20 +131,40 @@ export default {
     ...mapState(['user']),
   },
   methods: {
-    ...user(['update']),
+    ...user(['update', 'fetch']),
     ...staff({ staffQuery: 'query', staffUpdate: 'update', staffFetch: 'fetch' }),
     ...expert({ expertQuery: 'query', expertUpdate: 'update', expertFetch: 'fetch' }),
+    ...department({ departmentQuery: 'query', departmentFetch: 'fetch' }),
+    ...level({ levelQuery: 'query', levelFetch: 'fetch' }),
+    ...login({ logout: 'logout' }),
     async search() {
+      this.searchInfo();
+      this.selectChild();
       if (this.user.type === '3') {
-        this.$set(this, `form`, this.user);
+        const user = await this.fetch(this.user.uid);
+        this.$set(this, `form`, user.data);
       } else if (this.user.type === '2') {
-        const expert = this.expertFetch(this.user.userid);
+        const expert = await this.expertFetch(this.user.userid);
         this.$set(this, `form`, expert.data);
       } else if (this.user.type === '1' || this.user.type === '0') {
-        const staff = this.staffFetch(this.user.userid);
+        const staff = await this.staffFetch(this.user.userid);
         this.$set(this, `form`, staff.data);
       }
     },
+    // 部门
+    async searchInfo() {
+      let res = await this.departmentQuery();
+      if (this.$checkRes(res)) {
+        this.$set(this, `deptList`, res.data);
+      }
+    },
+    // 职务
+    async selectChild(dept_id) {
+      let res = await this.levelQuery(dept_id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `levelList`, res.data);
+      }
+    },
     inputIdnumber() {
       let card = this.form.id_number;
       if (card.length == 18) {
@@ -158,7 +181,7 @@ export default {
         this.form.gender = gender;
       }
     },
-    async onSubmit(from) {
+    async onSubmit() {
       let res = {};
       let data = JSON.parse(JSON.stringify(this.form));
       if (this.user.type === '3') {
@@ -179,10 +202,18 @@ export default {
       } else {
         this.$message.error('信息修改失败');
       }
+      if (data.phone != this.user.phone) {
+        this.logoutBtn();
+      }
     },
     uploadSuccess({ type, data }) {
       this.$set(this.form, `${type}`, data.uri);
     },
+    // 退出登录
+    logoutBtn() {
+      this.logout();
+      this.$router.push({ path: '/' });
+    },
   },
 };
 </script>

+ 30 - 2
src/views/pcenter/uppasswd.vue

@@ -25,6 +25,8 @@
 </template>
 
 <script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: login } = createNamespacedHelpers('login');
 export default {
   name: 'uppasswd',
   props: {},
@@ -38,15 +40,41 @@ export default {
     display: false,
   }),
   created() {},
-  computed: {},
+  computed: {
+    ...mapState(['user']),
+  },
   methods: {
+    ...login(['logout', 'uppasswd']),
     insurePasswd() {
       let newpasswd = this.form.newpasswd;
       let _newpasswd = this.form._newpasswd;
-      if (newpasswd != _newpasswd) {
+      if (newpasswd === _newpasswd) {
+        this.display = false;
+      } else {
         this.display = true;
       }
     },
+    async onSubmit() {
+      let res = {};
+      let data = JSON.parse(JSON.stringify(this.form));
+      data.userid = this.user.uid;
+      delete data._newpasswd;
+      res = await this.uppasswd(data);
+      if (res.errcode === 0) {
+        this.$message({
+          message: '密码修改成功',
+          type: 'success',
+        });
+        this.logoutBtn();
+      } else {
+        this.$message.error('密码修改失败');
+      }
+    },
+    // 退出登录
+    logoutBtn() {
+      this.logout();
+      this.$router.push({ path: '/' });
+    },
   },
 };
 </script>

+ 24 - 6
src/views/register.vue

@@ -36,16 +36,16 @@
                     </el-radio-group>
                   </el-form-item>
                   <el-form-item label="性别" prop="gender" v-if="form.type == '0' || form.type == '1' || form.type == '2'">
-                    <el-radio-group v-model="form.gender">
-                      <el-radio label="0">女</el-radio>
-                      <el-radio label="1">男</el-radio>
+                    <el-radio-group v-model="form.gender" disabled>
+                      <el-radio label="男">男</el-radio>
+                      <el-radio label="女">女</el-radio>
                     </el-radio-group>
                   </el-form-item>
                   <el-form-item label="家庭住址" prop="address" v-if="form.type == '0' || form.type == '1' || form.type == '2'">
                     <el-input v-model="form.address" placeholder="请输入家庭住址"></el-input>
                   </el-form-item>
                   <el-form-item label="身份证号" prop="id_number" v-if="form.type == '0' || form.type == '1' || form.type == '2'">
-                    <el-input v-model="form.id_number" placeholder="请输入身份证号"></el-input>
+                    <el-input v-model="form.id_number" placeholder="请输入身份证号" @input="inputIdnumber()"></el-input>
                   </el-form-item>
                   <el-form-item label="所在部门" prop="dept_id" v-if="form.type == '0' || form.type == '1'">
                     <el-select v-model="form.dept_id" filterable @change="selectChild">
@@ -63,8 +63,8 @@
                   <el-form-item label="头像" prop="img_url" v-if="form.type == '2'">
                     <upload :limit="1" :data="form.img_url" type="img_url" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
                   </el-form-item>
-                  <el-form-item label="出生" prop="birthday" v-if="form.type == '2'">
-                    <el-date-picker v-model="form.birthday" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"> </el-date-picker>
+                  <el-form-item label="出生" prop="birthday" v-if="form.type !== '3'">
+                    <el-date-picker disabled v-model="form.birthday" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"> </el-date-picker>
                   </el-form-item>
                   <el-form-item label="职称级别" prop="level" v-if="form.type == '2'">
                     <el-input v-model="form.level" placeholder="请输入职称级别"></el-input>
@@ -247,6 +247,24 @@ export default {
     uploadSuccess({ type, data }) {
       this.$set(this.form, `${type}`, data.uri);
     },
+    inputIdnumber() {
+      let card = this.form.id_number;
+      if (card.length === 18) {
+        let birth = card.substring(6, 10) + '-' + card.substring(10, 12) + '-' + card.substring(12, 14);
+        let gender = parseInt(card.substr(16, 1)) % 2 == 1 ? '男' : '女';
+        let myDate = new Date();
+        let month = myDate.getMonth() + 1;
+        let day = myDate.getDate();
+        let age = myDate.getFullYear() - card.substring(6, 10) - 1;
+        if (card.substring(10, 12) < month || (card.substring(10, 12) == month && card.substring(12, 14) <= day)) {
+          age++;
+        }
+        console.log(birth);
+        console.log(gender);
+        this.form.birthday = birth;
+        this.form.gender = gender;
+      }
+    },
   },
   computed: {
     ...mapState(['user']),