wuhongyu 5 yıl önce
ebeveyn
işleme
24d9e9a309

+ 45 - 0
src/store/demand.js

@@ -0,0 +1,45 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  demandInfo: `/api/count/demand`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit = 10, ...info } = {}) {
+    const res = await this.$axios.$get(api.demandInfo, {
+      skip,
+      limit,
+      ...info,
+    });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.demandInfo}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.demandInfo}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...info } = {}) {
+    const res = await this.$axios.$post(`${api.demandInfo}/update/${id}`, {
+      ...info,
+    });
+    return res;
+  },
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.demandInfo}/${payload}`);
+    return res;
+  },
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 2 - 0
src/store/index.js

@@ -10,6 +10,7 @@ import expert from './expert';
 import login from './login';
 import user from './user';
 import news from './news';
+import demand from './demand';
 Vue.use(Vuex);
 
 export default new Vuex.Store({
@@ -25,5 +26,6 @@ export default new Vuex.Store({
     expert,
     user,
     news,
+    demand,
   },
 });

+ 1 - 1
src/views/achievement/index.vue

@@ -68,7 +68,7 @@
                     <span v-else-if="columnName == '知识产权'">
                       <knowledgeDetail :details="details"></knowledgeDetail>
                     </span>
-                    <span v-else-if="columnName == '科技支撑'">
+                    <span v-else-if="columnName == '科技合作'">
                       <technologyDetail :details="details"></technologyDetail>
                     </span>
                     <span v-else-if="columnName == '超算联盟'">

+ 184 - 44
src/views/pcenter/demand.vue

@@ -3,8 +3,7 @@
     <el-row>
       <el-col :span="24" class="style">
         <el-col :span="24" class="list" v-if="display">
-          <el-col :span="24" class="top"><el-button type="primary" size="mini" @click="add">添加</el-button></el-col>
-          <el-col :span="24" class="main"></el-col>
+          <el-col :span="24" class="top" v-if="user.type === '3'"><el-button type="primary" size="mini" @click="add">添加</el-button></el-col>
           <template>
             <el-table :data="tableData" border style="width: 100%">
               <el-table-column prop="name" label="需求技术名称" align="center"> </el-table-column>
@@ -24,49 +23,93 @@
                   }}</span>
                 </template>
               </el-table-column>
-              <el-table-column label="操作"> </el-table-column>
+              <el-table-column label="操作" align="center">
+                <template slot-scope="scope">
+                  <el-button size="mini" @click="view(scope.row.id)">查看</el-button>
+                  <el-button type="danger" size="mini" @click="del(scope.row.id)">删除</el-button>
+                  <el-button v-if="user.type === '3' && scope.row.status == '0'" type="success" @click="refer(scope.row.id, { status: '1' })"
+                    >提交审核</el-button
+                  >
+                  <el-button v-if="user.type === '0' || user.type === '1'" type="success" size="mini" @click="refer(scope.row.id, { status: '2' })"
+                    >审核通过</el-button
+                  >
+                  <el-button v-if="user.type === '0' || user.type === '1'" type="warning" size="mini" @click="refer(scope.row.id, { status: '3' })"
+                    >审核拒绝</el-button
+                  >
+                </template>
+              </el-table-column>
             </el-table>
+            <page :total="total" position="right" @query="search"></page>
           </template>
         </el-col>
         <el-col :span="24" class="datail" v-else>
-          <el-form ref="form" :model="form" label-width="120px">
-            <el-form-item label="需求技术名称">
-              <el-input v-model="form.name" placeholder="请输入需求技术名称"></el-input>
-            </el-form-item>
-            <el-form-item label="所属领域">
-              <el-radio-group v-model="form.field">
-                <el-radio label="工业">工业</el-radio>
-                <el-radio label="农业">农业</el-radio>
-                <el-radio label="社会发展">社会发展</el-radio>
-                <el-radio label="医疗健康">医疗健康</el-radio>
-              </el-radio-group>
-            </el-form-item>
-            <el-form-item label="拟投入预算(万)">
-              <el-input v-model="form.budget" placeholder="请输入拟投入预算(万)"></el-input>
-            </el-form-item>
-            <el-form-item label="需求截止日期" prop="enddate">
-              <el-date-picker v-model="form.enddate" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" placeholder="请选择日期"> </el-date-picker>
-            </el-form-item>
-            <el-form-item label="难题或瓶颈问题">
-              <el-input
-                v-model="form.problem"
-                type="textarea"
-                placeholder="阐述在生产经营、项目建设、科研活动、产业化方向中遇到的技术难题或瓶颈问题及需达到的技术指标"
-              ></el-input>
-            </el-form-item>
-            <el-form-item label="企业解决技术需求已具备的条件">
-              <el-input v-model="form.problem" type="textarea" placeholder="企业承接成果、技术所具备的技术人员、设备、资金等基础条件及其他配套条件"></el-input>
-            </el-form-item>
-            <el-form-item label="合作方式">
-              <el-radio-group v-model="form.type">
-                <el-radio label="技术转让">技术转让</el-radio>
-                <el-radio label="技术服务">技术服务</el-radio>
-                <el-radio label="技术许可">技术许可</el-radio>
-                <el-radio label="技术融资">技术融资</el-radio>
-                <el-radio label="其他">其他</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-form>
+          <el-col class="top"><el-button type="primary" size="mini" @click="back">返回</el-button></el-col>
+          <el-col class="main">
+            <el-form ref="form" :model="form" label-width="120px" :rules="rules">
+              <el-form-item label="需求技术名称" prop="name">
+                <el-input :disabled="disabled" v-model="form.name" placeholder="请输入需求技术名称"></el-input>
+              </el-form-item>
+              <el-form-item label="所属领域" prop="field">
+                <el-radio-group :disabled="disabled" v-model="form.field">
+                  <el-radio label="工业">工业</el-radio>
+                  <el-radio label="农业">农业</el-radio>
+                  <el-radio label="社会发展">社会发展</el-radio>
+                  <el-radio label="医疗健康">医疗健康</el-radio>
+                </el-radio-group>
+              </el-form-item>
+              <el-form-item label="拟投入预算(万)">
+                <el-input :disabled="disabled" v-model="form.budget" placeholder="请输入拟投入预算(万)"></el-input>
+              </el-form-item>
+              <el-form-item label="需求截止日期" prop="enddate">
+                <el-date-picker :disabled="disabled" v-model="form.enddate" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" placeholder="请选择日期">
+                </el-date-picker>
+              </el-form-item>
+              <el-form-item label="难题或瓶颈问题">
+                <el-input
+                  :disabled="disabled"
+                  v-model="form.problem"
+                  type="textarea"
+                  placeholder="阐述在生产经营、项目建设、科研活动、产业化方向中遇到的技术难题或瓶颈问题及需达到的技术指标"
+                ></el-input>
+              </el-form-item>
+              <el-form-item label="企业解决技术需求已具备的条件">
+                <el-input
+                  :disabled="disabled"
+                  v-model="form.condition"
+                  type="textarea"
+                  placeholder="企业承接成果、技术所具备的技术人员、设备、资金等基础条件及其他配套条件"
+                ></el-input>
+              </el-form-item>
+              <el-form-item label="合作方式" prop="type">
+                <el-radio-group :disabled="disabled" v-model="form.type">
+                  <el-radio label="技术转让">技术转让</el-radio>
+                  <el-radio label="技术服务">技术服务</el-radio>
+                  <el-radio label="技术许可">技术许可</el-radio>
+                  <el-radio label="技术融资">技术融资</el-radio>
+                  <el-radio label="其他">其他</el-radio>
+                </el-radio-group>
+              </el-form-item>
+              <el-form-item label="是否在网页显示" prop="is_display">
+                <el-radio-group :disabled="disabled" v-model="form.is_display">
+                  <el-radio label="0">是</el-radio>
+                  <el-radio label="1">否</el-radio>
+                </el-radio-group>
+              </el-form-item>
+              <el-form-item label="状态" prop="status">
+                <el-radio-group :disabled="disabled" v-model="form.status">
+                  <el-radio label="0">保存草稿</el-radio>
+                  <el-radio label="1">提交审核</el-radio>
+                  <el-radio label="2" v-if="user.type === '0' || user.type === '1'">审核通过</el-radio>
+                  <el-radio label="3" v-if="user.type === '0' || user.type === '1'">审核拒绝</el-radio>
+                </el-radio-group>
+              </el-form-item>
+              <el-form-item>
+                <el-button v-if="user.type === '3'" type="primary" @click="onSubmit()">提交</el-button>
+                <el-button v-if="user.type === '0' || user.type === '1'" type="success" @click="refer(scope.row.id, { status: '2' })">审核通过</el-button>
+                <el-button v-if="user.type === '0' || user.type === '1'" type="warning" @click="refer(scope.row.id, { status: '3' })">审核拒绝</el-button>
+              </el-form-item>
+            </el-form>
+          </el-col>
         </el-col>
       </el-col>
     </el-row>
@@ -74,20 +117,107 @@
 </template>
 
 <script>
+import page from '@/components/pagination.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: demand } = createNamespacedHelpers('demand');
 export default {
   name: 'demand',
   props: {},
-  components: {},
+  components: { page },
   data: () => ({
     tableData: [],
     display: true,
     form: {},
+    total: 0,
+    rules: {
+      name: [{ required: true, message: '请输入需求技术名称', trigger: 'blur' }],
+      field: [{ required: true, message: '请选择所属领域', trigger: 'blur' }],
+      is_display: [{ required: true, message: '请选择是否在网页显示', trigger: 'blur' }],
+      status: [{ required: true, message: '请选择状态', trigger: 'blur' }],
+      type: [{ required: true, message: '请选择合作方式', trigger: 'blur' }],
+    },
+    disabled: false,
   }),
-  created() {},
-  computed: {},
+  created() {
+    this.search();
+  },
+  computed: {
+    ...mapState(['user']),
+  },
   methods: {
+    ...demand(['update', 'fetch', 'query', 'create', 'delete']),
+    // 查询信息列表
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = {};
+      if (this.user.type === '0' || this.user.type === '1') {
+        res = await this.query({ skip, limit, ...info });
+      }
+      if (this.user.type === '3') {
+        res = await this.query({ skip, limit, uid: this.user.uid });
+      }
+      this.$set(this, `tableData`, res.data);
+      this.$set(this, `total`, res.total);
+    },
+    async view(id) {
+      const res = await this.fetch(id);
+      this.$set(this, `form`, res.data);
+      if (this.user.type === '0' || this.user.type === '1' || res.data.status != '0') {
+        this.disabled = true;
+      }
+      this.display = false;
+    },
+    async del(id) {
+      const res = await this.delete(id);
+      if (res.errcode === 0) {
+        this.$message({
+          message: '信息删除成功',
+          type: 'success',
+        });
+        this.search();
+      } else {
+        this.$message.error('信息删除失败');
+      }
+    },
+    async refer(id, { status }) {
+      const res = await this.update({ id, status });
+      if (res.errcode === 0) {
+        this.$message({
+          message: '信息修改成功',
+          type: 'success',
+        });
+        this.search();
+      } else {
+        this.$message.error('信息修改失败');
+      }
+    },
     add() {
       this.display = false;
+      this.form = {};
+    },
+    // 返回
+    back() {
+      console.log(this.display);
+      this.display = true;
+    },
+    async onSubmit() {
+      let res = {};
+      let data = JSON.parse(JSON.stringify(this.form));
+      if (data.id) {
+        res = await this.update(data);
+      } else {
+        data.uid = this.user.uid;
+        res = await this.create(data);
+      }
+      if (res.errcode === 0) {
+        this.$message({
+          message: '信息创建成功',
+          type: 'success',
+        });
+        this.display = true;
+        this.search();
+      } else {
+        this.$message.error('信息创建失败');
+      }
     },
   },
 };
@@ -109,4 +239,14 @@ export default {
 /deep/ .el-textarea__inner {
   width: 600px;
 }
+.list /deep/.el-button {
+  display: inline-block;
+  height: 30px;
+  width: 48px;
+  text-align: center;
+  line-height: 20px;
+  padding: 0;
+  margin: 5px 1px;
+  font-size: 11px;
+}
 </style>

+ 114 - 0
src/views/pcenter/department.vue

@@ -0,0 +1,114 @@
+<template>
+  <div id="department">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top"><el-button type="primary" size="mini" @click="add">添加</el-button></el-col>
+        <el-col :span="24">
+          <el-table :data="tableData" border style="width: 100%">
+            <el-table-column prop="name" label="部门名称" align="center"> </el-table-column>
+            <el-table-column label="操作" align="center">
+              <template slot-scope="scope">
+                <el-button size="mini" @click="view(scope.row.id)">查看</el-button>
+                <el-button type="danger" size="mini" @click="del(scope.row.id)">删除</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <page :total="total" position="right" @query="search"></page>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog title="部门信息" :visible.sync="dialog" center>
+      <el-form :model="form">
+        <el-form-item label="部门名称" label-width="80px">
+          <el-input v-model="form.name" autocomplete="off"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="onSubmit">确 定</el-button>
+        <el-button @click="dialog = false">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import page from '@/components/pagination.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: department } = createNamespacedHelpers('department');
+export default {
+  name: 'department',
+  props: {},
+  components: { page },
+  data: () => ({
+    dialog: false,
+    form: {},
+    tableData: [],
+    total: 0,
+  }),
+  created() {
+    this.search();
+  },
+  computed: {},
+  methods: {
+    ...department(['create', 'update', 'query', 'fetch', 'delete']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info });
+      this.$set(this, `tableData`, res.data);
+      this.$set(this, `total`, res.total);
+    },
+    async view(id) {
+      this.dialog = true;
+      const res = await this.fetch(id);
+      this.$set(this, `form`, res.data);
+    },
+    async add() {
+      this.dialog = true;
+      this.form = {};
+    },
+    async del(id) {
+      const res = await this.delete(id);
+      if (res.errcode === 0) {
+        this.$message({
+          message: '信息删除成功',
+          type: 'success',
+        });
+        this.search();
+      } else {
+        this.$message.error('信息删除失败');
+      }
+    },
+    async onSubmit() {
+      this.dialog = false;
+      let res = {};
+      let data = JSON.parse(JSON.stringify(this.form));
+      if (data.id) {
+        res = await this.update(data);
+      } else {
+        res = await this.create(data);
+      }
+      if (res.errcode === 0) {
+        this.$message({
+          message: '信息创建成功',
+          type: 'success',
+        });
+        this.display = true;
+        this.search();
+      } else {
+        this.$message.error('信息创建失败');
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  width: 95%;
+  margin: 0 auto;
+  float: none;
+}
+.top {
+  text-align: right;
+  padding: 0 0 10px 0;
+}
+</style>

+ 16 - 8
src/views/pcenter/index.vue

@@ -29,22 +29,22 @@
                       <span>需求管理</span>
                     </template>
                   </el-menu-item>
-                  <el-menu-item index="3">
+                  <el-menu-item index="3" v-if="user.type === '0' || user.type === '1'">
                     <template slot="title">
                       <span>信息管理</span>
                     </template>
                   </el-menu-item>
-                  <el-menu-item index="4">
+                  <el-menu-item index="4" v-if="user.type === '0'">
                     <template slot="title">
                       <span>人员管理</span>
                     </template>
                   </el-menu-item>
-                  <el-menu-item index="5">
+                  <el-menu-item index="5" v-if="user.type === '0'">
                     <template slot="title">
                       <span>部门管理</span>
                     </template>
                   </el-menu-item>
-                  <el-menu-item index="6">
+                  <el-menu-item index="6" v-if="user.type === '0'">
                     <template slot="title">
                       <span>职务管理</span>
                     </template>
@@ -78,21 +78,23 @@
                 </el-col>
               </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">
+                  <personnelAdmin></personnelAdmin>
+                </el-col>
               </span>
               <span v-else-if="columnName == '部门管理'">
                 <el-col :span="24" class="infoTop"> <span>|</span><span>部门管理</span> </el-col>
+                <department></department>
               </span>
               <span v-else-if="columnName == '职务管理'">
                 <el-col :span="24" class="infoTop"> <span>|</span><span>职务管理</span> </el-col>
+                <level></level>
               </span>
               <span v-else-if="columnName == '修改密码'">
                 <el-col :span="24" class="infoTop"> <span>|</span><span>修改密码</span> </el-col>
                 <uppasswd></uppasswd>
               </span>
-              <span v-else-if="columnName == '退出登录'">
-                退出登录
-              </span>
             </el-col>
           </div>
         </el-col>
@@ -110,9 +112,12 @@
 import top from '@/layout/common/top.vue';
 import foot from '@/layout/common/foot.vue';
 import infoAdmin from './parts/infoAdmin.vue';
+import personnelAdmin from './parts/personnelAdmin.vue';
 import demand from '@/views/pcenter/demand.vue';
 import pinfo from '@/views/pcenter/pinfo.vue';
 import uppasswd from '@/views/pcenter/uppasswd.vue';
+import department from '@/views/pcenter/department.vue';
+import level from '@/views/pcenter/level.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: login } = createNamespacedHelpers('login');
 export default {
@@ -122,9 +127,12 @@ export default {
     top,
     foot,
     infoAdmin, //信息管理
+    personnelAdmin, //人员管理
     pinfo,
     uppasswd,
     demand,
+    department,
+    level,
   },
   data: function() {
     return {

+ 134 - 0
src/views/pcenter/level.vue

@@ -0,0 +1,134 @@
+<template>
+  <div id="level">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top"><el-button type="primary" size="mini" @click="add">添加</el-button></el-col>
+        <el-col :span="24">
+          <el-table :data="tableData" border style="width: 100%">
+            <el-table-column prop="dept_name" label="部门名称" align="center"> </el-table-column>
+            <el-table-column prop="name" label="职务名称" align="center"> </el-table-column>
+            <el-table-column label="操作" align="center">
+              <template slot-scope="scope">
+                <el-button size="mini" @click="view(scope.row.id)">查看</el-button>
+                <el-button type="danger" size="mini" @click="del(scope.row.id)">删除</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+          <page :total="total" position="right" @query="search"></page>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog title="职务信息" :visible.sync="dialog" center>
+      <el-form :model="form" label-width="80px">
+        <el-form-item label="部门名称">
+          <el-select v-model="form.dept_id" filterable placeholder="请选择部门">
+            <el-option v-for="(item, index) in deptList" :key="index" :label="item.name" :value="item._id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="职务名称">
+          <el-input v-model="form.name" autocomplete="off"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="onSubmit">确 定</el-button>
+        <el-button @click="dialog = false">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import page from '@/components/pagination.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: department } = createNamespacedHelpers('department');
+const { mapActions: level } = createNamespacedHelpers('level');
+export default {
+  name: 'level',
+  props: {},
+  components: { page },
+  data: () => ({
+    tableData: [],
+    form: {},
+    total: 0,
+    dialog: false,
+    deptList: [],
+  }),
+  created() {
+    this.search();
+  },
+  computed: {},
+  methods: {
+    ...department({ departmentQuery: 'query', departmentFetch: 'fetch' }),
+    ...level(['create', 'update', 'query', 'fetch', 'delete']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info });
+      console.log(res);
+
+      this.$set(this, `tableData`, res.data);
+      this.$set(this, `total`, res.total);
+    },
+    // 部门
+    async searchInfo() {
+      let res = await this.departmentQuery();
+      if (this.$checkRes(res)) {
+        this.$set(this, `deptList`, res.data);
+      }
+    },
+    async view(id) {
+      this.dialog = true;
+      const res = await this.fetch(id);
+      this.$set(this, `form`, res.data);
+      this.searchInfo();
+    },
+    async add() {
+      this.dialog = true;
+      this.form = {};
+      this.searchInfo();
+    },
+    async del(id) {
+      const res = await this.delete(id);
+      if (res.errcode === 0) {
+        this.$message({
+          message: '信息删除成功',
+          type: 'success',
+        });
+        this.search();
+      } else {
+        this.$message.error('信息删除失败');
+      }
+    },
+    async onSubmit() {
+      this.dialog = false;
+      let res = {};
+      let data = JSON.parse(JSON.stringify(this.form));
+      if (data.id) {
+        res = await this.update(data);
+      } else {
+        res = await this.create(data);
+      }
+      if (res.errcode === 0) {
+        this.$message({
+          message: '信息创建成功',
+          type: 'success',
+        });
+        this.display = true;
+        this.search();
+      } else {
+        this.$message.error('信息创建失败');
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  width: 95%;
+  margin: 0 auto;
+  float: none;
+}
+.top {
+  text-align: right;
+  padding: 0 0 10px 0;
+}
+</style>

+ 132 - 42
src/views/pcenter/parts/infoAdmin.vue

@@ -13,19 +13,29 @@
               <el-table-column prop="publish_unit" 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>
+                  <span>{{
+                    scope.row.status == '0'
+                      ? '草稿'
+                      : scope.row.status == '1'
+                      ? '审核中'
+                      : scope.row.status == '2'
+                      ? '审核通过'
+                      : scope.row.status == '3'
+                      ? '审核拒绝'
+                      : '未识别'
+                  }}</span>
                 </template>
               </el-table-column>
               <el-table-column label="操作" align="center" width="220">
-                <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 slot-scope="scope">
+                  <el-button size="mini" type="primary" @click="examineBtn(scope.row)" v-if="user.type == '0' || user.type == '1'">审核</el-button>
+                  <el-button size="mini" type="primary" v-if="scope.row.status == '0'" @click="examineBtn(scope.row)">编辑</el-button>
+                  <el-button size="mini" type="success" v-if="scope.row.status == '0'" @click="submitInfo(scope.row)">发布</el-button>
+                  <el-button size="mini" type="danger" @click="deleteBtn(scope.row.id)">删除</el-button>
                 </template>
               </el-table-column>
             </el-table>
+            <page :total="total" position="right" @query="searchInfo"></page>
           </el-col>
         </span>
         <span v-else>
@@ -55,9 +65,9 @@
                 </el-radio-group>
               </el-form-item>
               <el-form-item label="链接地址" prop="url" v-if="form.type == '1'">
-                <el-input v-model="form.url" placeholder="请输入链接地址"></el-input>
+                <el-input v-model="form.url" placeholder="请输入链接地址(https://)"></el-input>
               </el-form-item>
-              <el-form-item label="发布单位" prop="publish_unit" v-if="form.type == '0'">
+              <el-form-item label="发布单位" prop="publish_unit">
                 <el-input v-model="form.publish_unit" placeholder="请输入发布单位"></el-input>
               </el-form-item>
               <el-form-item label="图片" prop="img_url" v-if="form.type == '0'">
@@ -83,13 +93,6 @@
                   <el-radio label="1">推荐</el-radio>
                 </el-radio-group>
               </el-form-item>
-              <el-form-item label="状态" prop="status" v-if="user.type == '0' || user.type == '1'">
-                <el-radio-group v-model="form.status">
-                  <el-radio label="0">草稿</el-radio>
-                  <el-radio label="1">审核中</el-radio>
-                  <el-radio label="2">审核通过</el-radio>
-                </el-radio-group>
-              </el-form-item>
               <el-col :span="24" style="text-align:center;">
                 <el-button type="success" v-if="user.type == '0' || user.type == '1'" @click="examineIn()">审核通过</el-button>
                 <el-button type="danger" v-if="user.type == '0' || user.type == '1'" @click="examineOut()">审核拒绝</el-button>
@@ -108,6 +111,7 @@
 <script>
 import upload from '@/components/upload.vue';
 import wangEditor from '@/components/wang-editor.vue';
+import page from '@/components/pagination.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: news } = createNamespacedHelpers('news');
 export default {
@@ -116,12 +120,14 @@ export default {
   components: {
     upload,
     wangEditor,
+    page,
   },
   data: function() {
     return {
       display: 'list',
       // 列表
       list: [],
+      total: 0,
       // 选择栏目
       column_list: [
         { value: '科技资讯', label: '科技资讯' },
@@ -131,7 +137,7 @@ export default {
         { value: '平台建设', label: '平台建设' },
         { value: '项目成果', label: '项目成果' },
         { value: '知识产权', label: '知识产权' },
-        { value: '科技支撑', label: '科技支撑' },
+        { value: '科技合作', label: '科技合作' },
         { value: '超算联盟', label: '超算联盟' },
         { value: '国家网格', label: '国家网格' },
         { value: '教学中心', label: '教学中心' },
@@ -147,9 +153,7 @@ export default {
         { value: '党风廉政', label: '党风廉政' },
       ],
       // 发布
-      form: {
-        type: '0',
-      },
+      form: {},
       // 规则
       rules: {
         col_name: [{ required: true, message: '请选择栏目', trigger: 'blur' }],
@@ -167,47 +171,128 @@ export default {
     this.searchInfo();
   },
   methods: {
-    ...news({ newsQuery: 'query', newsCreate: 'create' }),
-    async searchInfo({ skip = 0, limit = 0, col_name = '工作动态', ...info } = {}) {
-      let res = await this.newsQuery({ skip, limit, col_name, ...info });
+    ...news({ newsQuery: 'query', newsCreate: 'create', newsUpdate: 'update', newsDelete: 'delete' }),
+    async searchInfo({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.newsQuery({ skip, limit, ...info });
       if (this.$checkRes(res)) {
         this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
       }
     },
     // 添加
     add() {
       this.display = 'detail';
+      this.form = {};
     },
     // 返回
     back() {
       this.display = 'list';
     },
+    // 列表发布信息
+    async submitInfo(data) {
+      data.status = '1';
+      let res = await this.newsUpdate(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '发布信息成功',
+          type: 'success',
+        });
+        this.searchInfo();
+      }
+    },
+    // 列表审核打开
+    examineBtn(data) {
+      this.display = 'detail';
+      this.$set(this, `form`, data);
+    },
+    // 详情审核通过
+    async examineIn() {
+      this.form.status = '2';
+      let res = await this.newsUpdate(this.form);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '审核通过',
+          type: 'success',
+        });
+        this.display = 'list';
+        this.searchInfo();
+      }
+    },
+    // 详情审核拒绝
+    async examineOut() {
+      this.form.status = '3';
+      let res = await this.newsUpdate(this.form);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '审核拒绝',
+          type: 'error',
+        });
+        this.display = 'list';
+        this.searchInfo();
+      }
+    },
     // 保存草稿
     submitDraft(formName) {
       this.$refs[formName].validate(async valid => {
         if (valid) {
-          this.form.uid = this.user.uid;
-          this.form.status = '0';
-          let res = await this.newsCreate(this.form);
-          if (this.$checkRes(res)) {
-            console.log(res);
+          if (this.form.publisher) {
+            let res = await this.newsUpdate(this.form);
+            if (this.$checkRes(res)) {
+              this.$message({
+                message: '修改信息成功',
+                type: 'success',
+              });
+              this.form = {};
+              this.display = 'list';
+              this.searchInfo();
+            }
+          } else {
+            this.form.publisher = this.user.uid;
+            this.form.status = '0';
+            let res = await this.newsCreate(this.form);
+            if (this.$checkRes(res)) {
+              this.$message({
+                message: '创建信息成功',
+                type: 'success',
+              });
+              this.form = {};
+              this.display = 'list';
+              this.searchInfo();
+            }
           }
-          console.log(this.form);
         } else {
           console.log('error submit!!');
           return false;
         }
       });
     },
-    // 提交
+    // 提交发布
     submitForm(formName) {
       this.$refs[formName].validate(async valid => {
         if (valid) {
-          this.form.publisher = this.user.uid;
-          this.form.status = '1';
-          let res = await this.newsCreate(this.form);
-          if (this.$checkRes(res)) {
-            console.log(res);
+          if (this.form.publisher) {
+            this.form.status = '1';
+            let res = await this.newsUpdate(this.form);
+            if (this.$checkRes(res)) {
+              this.$message({
+                message: '发布信息成功',
+                type: 'success',
+              });
+              this.display = 'list';
+              this.searchInfo();
+            }
+          } else {
+            this.form.publisher = this.user.uid;
+            this.form.status = '1';
+            let res = await this.newsCreate(this.form);
+            if (this.$checkRes(res)) {
+              this.$message({
+                message: '发布信息成功',
+                type: 'success',
+              });
+              this.display = 'list';
+              this.searchInfo();
+            }
           }
         } else {
           console.log('error submit!!');
@@ -218,14 +303,19 @@ export default {
     // 取消
     resetForm(formName) {
       this.$refs[formName].resetFields();
+      this.display = 'list';
+      this.searchInfo();
     },
-    // 审核通过
-    examineIn() {
-      console.log('审核通过');
-    },
-    // 审核拒绝
-    examineOut() {
-      console.log('审核拒绝');
+    // 删除
+    async deleteBtn(id) {
+      let res = await this.newsDelete(id);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '删除信息成功',
+          type: 'success',
+        });
+        this.searchInfo();
+      }
     },
     // 图片
     uploadSuccess({ type, data }) {

+ 193 - 0
src/views/pcenter/parts/personnelAdmin.vue

@@ -0,0 +1,193 @@
+<template>
+  <div id="personnelAdmin">
+    <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="name" label="姓名" align="center"> </el-table-column>
+              <el-table-column label="操作" align="center" width="220">
+                <template slot-scope="scope">
+                  <el-button size="mini" type="primary" v-if="scope.row.status == '0'" @click="editBtn(scope.row.id)">编辑</el-button>
+                  <el-button size="mini" type="danger" @click="deleteBtn(scope.row.id)">删除</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <page :total="total" position="right" @query="searchInfo"></page>
+          </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="name">
+                <el-input v-model="form.name" placeholder="请输入姓名"></el-input>
+              </el-form-item>
+              <el-form-item label="性别" prop="gender">
+                <el-radio-group v-model="form.gender">
+                  <el-radio label="男">男</el-radio>
+                  <el-radio label="女">女</el-radio>
+                </el-radio-group>
+              </el-form-item>
+              <el-form-item label="电话" prop="phone">
+                <el-input v-model="form.phone" placeholder="请输入电话" maxlength="11"></el-input>
+              </el-form-item>
+              <el-form-item label="密码" prop="passwd">
+                <el-input v-model="form.passwd" placeholder="请输入密码" show-password></el-input>
+              </el-form-item>
+              <el-form-item label="家庭住址" prop="address">
+                <el-input v-model="form.address" placeholder="请输入家庭住址"></el-input>
+              </el-form-item>
+              <el-form-item label="出生日期" prop="birthday">
+                <el-date-picker v-model="form.birthday" type="date" placeholder="选择出生日期" value-format="yyyy-MM-dd"> </el-date-picker>
+              </el-form-item>
+              <el-form-item label="身份证号" prop="id_number">
+                <el-input v-model="form.id_number" placeholder="请输入身份证号"></el-input>
+              </el-form-item>
+              <el-form-item label="部门" prop="dept_id">
+                <el-select v-model="form.dept_id" filterable placeholder="请选择部门" @change="selectChild">
+                  <el-option v-for="(item, index) in deptList" :key="index" :label="item.name" :value="item._id"></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="职务" prop="level_id">
+                <el-select v-model="form.level_id" filterable placeholder="请选择职务">
+                  <el-option v-for="(item, index) in levelList" :key="index" :label="item.name" :value="item._id"></el-option>
+                </el-select>
+              </el-form-item>
+              <el-col :span="24" style="text-align:center;">
+                <el-button type="primary" @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 page from '@/components/pagination.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: department } = createNamespacedHelpers('department');
+const { mapActions: level } = createNamespacedHelpers('level');
+const { mapActions: registers } = createNamespacedHelpers('registers');
+const { mapActions: staff } = createNamespacedHelpers('staff');
+export default {
+  name: 'personnelAdmin',
+  props: {},
+  components: {
+    page,
+  },
+  data: function() {
+    return {
+      display: 'list',
+      // 列表
+      list: [],
+      total: 0,
+      // 发布
+      form: {},
+      // 规则
+      rules: {
+        name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
+        gender: [{ required: true, message: '请输入性别', trigger: 'blur' }],
+        phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }],
+        passwd: [{ required: true, message: '请输入密码', trigger: 'blur' }],
+        address: [{ required: false, message: '请输入住址', trigger: 'blur' }],
+        birthday: [{ required: false, message: '请输入出生日期', trigger: 'blur' }],
+        id_number: [{ required: false, message: '请输入身份证号', trigger: 'blur' }],
+        dept_id: [{ required: true, message: '请输入部门', trigger: 'blur' }],
+        level_id: [{ required: true, message: '请输入职务', trigger: 'blur' }],
+      },
+      // 部门
+      deptList: [],
+      levelList: [],
+      dept_id: '',
+    };
+  },
+  created() {
+    this.searchInfo();
+  },
+  methods: {
+    ...department({ departmentQuery: 'query', departmentFetch: 'fetch' }),
+    ...level({ levelQuery: 'query', levelFetch: 'fetch' }),
+    ...registers(['create']),
+    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)) {
+        console.log(res.data);
+        this.$set(this, `levelList`, res.data);
+      }
+    },
+    // 添加
+    add() {
+      this.display = 'detail';
+    },
+    // 返回
+    back() {
+      this.display = 'list';
+    },
+    // 编辑
+    editBtn(id) {
+      this.display = 'detail';
+    },
+    // 删除
+    deleteBtn(id) {
+      console.log('删除');
+    },
+    // 保存
+    submitForm(formName) {
+      this.$refs[formName].validate(async valid => {
+        if (valid) {
+          let res = await this.create(this.form);
+          if (this.$checkRes(res)) {
+            this.$message({
+              message: '恭喜你,注册成功',
+              type: 'success',
+            });
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    // 取消
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+      this.display = 'list';
+    },
+  },
+  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 20px 20px;
+  .top {
+    text-align: right;
+    padding: 10px 0;
+  }
+}
+</style>

+ 9 - 8
src/views/pcenter/pinfo.vue

@@ -3,16 +3,16 @@
     <el-row>
       <el-col :span="24">
         <el-form ref="form" :model="form" label-width="120px" :rules="rules">
-          <el-form-item label="用户名" prop="name">
+          <el-form-item label="用户名" prop="name">
             <el-input v-model="form.name"></el-input>
           </el-form-item>
-          <el-form-item label="手机号" prop="phone">
+          <el-form-item label="手机号" prop="phone">
             <el-input v-model="form.phone"></el-input
             ><span style="color:red;"
               ><i class="el-icon-warning" style="margin-right:5px;"></i>如果您修改手机号,那么登录时使用的手机号也会发生变更,请谨慎修改!</span
             >
           </el-form-item>
-          <el-form-item v-if="this.user.type != '3'" label="身份证号" prop="id_number">
+          <el-form-item v-if="this.user.type != '3'" label="身份证号" prop="id_number">
             <el-input v-model="form.id_number" @input="inputIdnumber()"></el-input>
           </el-form-item>
           <el-form-item v-if="this.user.type != '3'" label="出生年月" prop="birthday">
@@ -25,15 +25,15 @@
               <el-radio label="女">女</el-radio>
             </el-radio-group>
           </el-form-item>
-          <el-form-item v-if="this.user.type != '3'" label="家庭住址">
+          <el-form-item v-if="this.user.type != '3'" label="家庭住址">
             <el-input v-model="form.address"></el-input>
           </el-form-item>
-          <el-form-item v-if="this.user.type === '0' || this.user.type === '1'" label="部门">
-            <el-select v-model="form.dept_id" filterable placeholder="请选择部门">
+          <el-form-item v-if="this.user.type === '0' || this.user.type === '1'" label="部门">
+            <el-select v-model="form.dept_id" filterable placeholder="请选择部门" @change="selectChild">
               <el-option v-for="(item, index) in deptList" :key="index" :label="item.name" :value="item._id"></el-option>
             </el-select>
           </el-form-item>
-          <el-form-item v-if="this.user.type === '0' || this.user.type === '1'" label="职务">
+          <el-form-item v-if="this.user.type === '0' || this.user.type === '1'" label="职务">
             <el-select v-model="form.level_id" filterable placeholder="请选择职务">
               <el-option v-for="(item, index) in levelList" :key="index" :label="item.name" :value="item._id"></el-option>
             </el-select>
@@ -160,7 +160,8 @@ export default {
     },
     // 职务
     async selectChild(dept_id) {
-      let res = await this.levelQuery(dept_id);
+      console.log(dept_id);
+      let res = await this.levelQuery({ dept_id });
       if (this.$checkRes(res)) {
         this.$set(this, `levelList`, res.data);
       }