浏览代码

会议管理

yanliming 4 年之前
父节点
当前提交
4fcb623e01
共有 4 个文件被更改,包括 238 次插入72 次删除
  1. 5 1
      src/api/base/address.js
  2. 12 0
      src/routers/modules/base.js
  3. 203 59
      src/views/base/meetingInfo-detail.vue
  4. 18 12
      src/views/base/meetingInfo-list.vue

+ 5 - 1
src/api/base/address.js

@@ -5,6 +5,10 @@ function pageList(formData){
   return request.post(constant.serverUrl + "/base/addressInfo/pageList", formData);
 }
 
+function list(){
+  return request.post(constant.serverUrl + "/base/addressInfo/list");
+}
+
 function create(){
   return request.get(constant.serverUrl + "/base/addressInfo/create");
 }
@@ -42,5 +46,5 @@ function batchRemove(idList){
 }
 
 export default {
-  pageList,create,edit,add,update,remove,batchRemove
+  pageList,create,edit,add,update,remove,batchRemove,list
 }

+ 12 - 0
src/routers/modules/base.js

@@ -776,6 +776,18 @@ var routers = [
 
                 }
         },
+        {
+                path: '/base/meetingInfo/detail',
+                name: 'BaseMeetingInfoDetail',
+                // route level code-splitting
+                // this generates a separate chunk (about.[hash].js) for this route
+                // which is lazy-loaded when the route is visited.
+                component: () => import('@/views/base/meetingInfo-detail.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '会议编辑'
+                }
+        },
 
 ]
 

+ 203 - 59
src/views/base/meetingInfo-detail.vue

@@ -1,19 +1,36 @@
 
-<style scoped>
-.user-panel {
-  margin: 10px auto;
+<style lang="scss" scoped>
+.el-breadcrumb {
+  margin: 10px;
+  line-height: 20px;
+}
+
+.el-divider {
+  margin: 5px 0;
+}
+
+.demo-form-inline {
+  margin-left: 10px;
+  text-align: left;
+}
+
+.button-group {
+  margin-left: 10px;
+  text-align: left;
 }
 </style>
 <template>
-  <el-dialog
-    :visible.sync="showDialog"
-    :title="title"
-    :modal-append-to-body="false"
-    style="text-align: left"
-    @close="closeDialog"
-    :close-on-click-modal="false"
-    width="950px"
-  >
+  <div>
+    <el-breadcrumb separator=">">
+      <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="#">基础信息</a>
+      </el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="/meetingInfo">会议管理</a>
+      </el-breadcrumb-item>
+    </el-breadcrumb>
+    <el-divider></el-divider>
     <div class="user-panel" v-loading="loading">
       <el-form
         ref="form"
@@ -23,6 +40,7 @@
         :inline="true" 
         class="demo-form-inline"
       >
+      <h4>会议基础信息</h4>
         <el-form-item label="会议编号" prop="number">
           <el-input
             v-model="formModel.number"
@@ -38,67 +56,164 @@
           ></el-input>
         </el-form-item>
         <el-form-item label="会议地点" prop="addressId">
-          <el-input
-            v-model="formModel.addressId"
-            placeholder="请输入详细地址"
-            style="width: 300px"
-          ></el-input>
+          <el-select v-model="formModel.addressId" placeholder="请选择" style="width: 180px">
+            <el-option
+              v-for="item in addressList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+              >
+            </el-option>
+          </el-select>
+           <el-button type="primary" style="margin-left: 20px">添加地点</el-button>
         </el-form-item>
-        <el-form-item label="会议日期" prop="addressId">
+        <el-form-item label="会议日期" prop="meetingDate">
           <el-input
-            v-model="formModel.addressId"
+            v-model="formModel.meetingDate"
             placeholder="请输入详细地址"
             style="width: 300px"
           ></el-input>
         </el-form-item>
-                <el-form-item label="会议内容" prop="addressId">
+                <el-form-item label="会议内容" prop="content">
           <el-input
-            v-model="formModel.addressId"
+            v-model="formModel.content"
             placeholder="请输入详细地址"
             style="width: 300px"
           ></el-input>
         </el-form-item>
-        <el-form-item label="会议备注" prop="addressId">
+        <el-form-item label="会议备注" prop="remark">
           <el-input
-            v-model="formModel.addressId"
+            v-model="formModel.remark"
             placeholder="请输入详细地址"
             style="width: 300px"
           ></el-input>
         </el-form-item>
         <h4>会议配置</h4>
-        <el-table
-        ref="formTable"
-        :data="tableData"
-        v-loading="loading"
-        :element-loading-text="loadingText"
-        stripe
-        :height="tableHeight"
-        >
-        <el-table-column prop="number" label="序号" width="150"></el-table-column>
-        <el-table-column prop="name" label="会议日期" width="200"></el-table-column>
-        <el-table-column prop="name" label="会议时间" width="200"></el-table-column>
-        <el-table-column prop="name" label="会前签到时间" ></el-table-column>
-        <el-table-column prop="name" label="结束签到时间" ></el-table-column>
-        </el-table>
-        <el-divider></el-divider>
-        <h4>添加参会人员</h4>
-        <el-form-item label="部门" prop="number">
-          <el-input
-            v-model="formModel.number"
-            placeholder="请输入会议编号"
-            style="width: 200px"
-          ></el-input>
-        </el-form-item>
 
-        <template>
-            <el-transfer
-                filterable
-                :filter-method="filterMethod"
-                filter-placeholder="请输入城市拼音"
-                v-model="value"
-                :data="data">
-            </el-transfer>
-        </template>
+        <el-table :data="formModel.meetingTimeList">
+            <el-table-column
+              type="index"
+              label="序号"
+              width="55"
+            ></el-table-column>
+            <el-table-column prop="name" label="会议日期" width="300px">
+              <template slot-scope="scope">
+                <el-form-item
+                  :prop="'meetingTimeList.' + scope.$index + '.name'"
+                  :rules="ruleValidate['name']"
+                >
+                  <el-input
+                    placeholder="站点名称"
+                    v-model="scope.row.name"
+                    style="width: 250px"
+                  ></el-input>
+                </el-form-item>
+              </template>
+            </el-table-column>
+            <el-table-column prop="classify" label="会议时间" width="130px">
+              <template slot-scope="{ row }">
+                <el-form-item>
+                  <el-time-picker
+                    v-model="row.location"
+                    :picker-options="{
+                      selectableRange: '18:30:00 - 20:30:00'
+                    }"
+                    placeholder="任意时间点">
+                  </el-time-picker>
+                </el-form-item>
+              </template>
+            </el-table-column>
+            <el-table-column prop="location" label="会前签到时间">
+              <template slot-scope="{ row }">
+                <el-form-item>
+                  <el-time-picker
+                    v-model="row.location"
+                    :picker-options="{
+                      selectableRange: '18:30:00 - 20:30:00'
+                    }"
+                    placeholder="任意时间点">
+                  </el-time-picker>
+                </el-form-item>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="结束签到时间" width="120px">
+              <template slot-scope="scope">
+                <el-form-item
+                  :prop="'meetingTimeList.' + scope.$index + '.radius'"
+                  :rules="ruleValidate['radius']"
+                >
+                  <el-time-picker
+                    v-model="scope.row.radius"
+                    :picker-options="{
+                      selectableRange: '18:30:00 - 20:30:00'
+                    }"
+                    placeholder="任意时间点">
+                  </el-time-picker>
+                </el-form-item>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" width="200">
+              <template slot-scope="{ row }">
+                <el-form-item>
+                  <i
+                    class="el-icon-delete my-font"
+                    @click="handleDelete(row)"
+                  ></i>
+                  <i class="el-icon-top my-font" @click="handleUp(row)"></i>
+                  <i
+                    class="el-icon-bottom my-font"
+                    @click="handleDown(row)"
+                  ></i>
+                  <i
+                    class="el-icon-document-add my-font"
+                    @click="handleInsert(row)"
+                  ></i>
+                </el-form-item>
+              </template>
+            </el-table-column>
+            <div slot="empty">
+              <el-button
+                icon="el-icon-circle-plus-outline"
+                :plain="true"
+                @click="handleAdd()"
+                >新增</el-button
+              >
+            </div>
+          </el-table>
+
+          <div
+            class="el-table__empty-block"
+            v-if="formModel.meetingTimeList.length != 0"
+          >
+            <el-button icon="el-icon-circle-plus-outline" @click="handleAdd()"
+              >新增</el-button
+            >
+          </div>
+
+        <h4>添加参会人员</h4>
+        <el-row>
+          <el-form-item label="部门" prop="companyInfoId">
+            <el-input
+              v-model="formModel.companyInfoId"
+              placeholder="请输入会议编号"
+              style="width: 200px"
+              size="mini"
+            ></el-input>
+          </el-form-item>
+        </el-row>
+        <el-row>
+          <el-form-item label="添加人员" prop="companyInfoId">
+            <template>
+                <el-transfer
+                    filterable
+                    :filter-method="filterMethod"
+                    filter-placeholder="请输入城市拼音"
+                    v-model="value"
+                    :data="data">
+                </el-transfer>
+            </template>
+          </el-form-item>
+        </el-row>
       </el-form>
     </div>
     <span slot="footer" class="dialog-footer">
@@ -107,14 +222,15 @@
         >确 定</el-button
       >
     </span>
-  </el-dialog>
+  </div>
 </template>
 <script>
 import meetingInfoApi from "@/api/base/meetingInfo";
-import dataDictionaryApi from "@/api/sys/dataDictionary";
+import addressInfoApi from "@/api/base/address";
 import "nprogress/nprogress.css"; // progress bar style
 
 export default {
+  name: "baseMeetingDetail",
   props: ["businessKey", "title"],
   data() {
     const generateData = _ => {
@@ -134,10 +250,19 @@ export default {
     return {
         data: generateData(),
         value:[],
-        formModel: {},
+        formModel: {
+          addressId:"",
+          meetingTimeList: [],
+          removeMeetingTimeList: []
+        },
         ruleValidate: {
-            name: [{ required: true, message: "会议地点名称不能为空", trigger: "blur" }],
+            number: [{ required: true, message: "会议编号不能为空", trigger: "blur" }],
+            name: [{ required: true, message: "会议名称不能为空", trigger: "blur" }],
+            addressId: [{ required: true, message: "会议地点不能为空", trigger: "blur" }],
+            meetingDate: [{ required: true, message: "会议地点名称不能为空", trigger: "blur" }],
+
         },
+        addressList:[],
         showDialog: true,
         loading: false,
         submitting: false,
@@ -146,6 +271,15 @@ export default {
         },
     };
   },
+  created() {
+    var self = this;
+    addressInfoApi.list().then(function(response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        self.addressList = jsonData.data;
+      }
+    });
+  },
   methods: {
     closeDialog() {
       this.$emit("close", false);
@@ -185,6 +319,16 @@ export default {
         }
       });
     },
+    handleAdd() {
+      this.formModel.meetingTimeList.push({
+        sortNo: this.formModel.meetingTimeList.length + 1,
+        name: "",
+        routeId: this.businessKey,
+        classify: "",
+        location: "",
+        delFlag: 0,
+      });
+    },
   },
   mounted: function () {
     var self = this;

+ 18 - 12
src/views/base/meetingInfo-list.vue

@@ -54,7 +54,7 @@
     </el-form>
     <el-divider></el-divider>
     <el-row class="button-group">
-      <el-button type="primary" size="small" plain icon="el-icon-circle-plus" @click="handleAdd">新增</el-button>
+      <el-button type="primary" size="small" plain icon="el-icon-circle-plus" @click="handleToDetail">新增</el-button>
       <el-button type="success" size="small" plain icon="el-icon-location-information" @click="handleToAddress">会议地点管理</el-button>
     </el-row>
     <el-table
@@ -108,7 +108,7 @@
         <template slot-scope="{row}">
           <el-row>
             <el-col :span="10">
-              <el-link type="primary" @click="handleEdit(row)">编辑</el-link>
+              <el-link type="primary" @click="handleToDetail(row)">编辑</el-link>
             </el-col>
             <el-col :span="10">
               <el-link type="primary" @click="bindDevice(row)">签到详情</el-link>
@@ -133,16 +133,9 @@
       @size-change="pageSizeChange"
       layout="total, sizes, prev, pager, next, jumper"
     ></el-pagination>
-    <meetingInfo-detail
-      v-if="showModal"
-      :businessKey="businessKey"
-      :title="modalTitle"
-      @close="onDetailModalClose"
-    ></meetingInfo-detail>
   </div>
 </template>
 <script>
-import meetingInfoDetail from "./meetingInfo-detail";
 import meetingInfoApi from "@/api/base/meetingInfo";
 import dataDictionaryApi from "@/api/sys/dataDictionary";
 import "nprogress/nprogress.css"; // progress bar style
@@ -332,6 +325,22 @@ export default {
         this.changePage(this.pageIndex);
       }
     },
+    handleToDetail(row){
+      var path = "/base/meetingInfo/detail";
+
+      this.$store.dispatch("tagsView/delView", {
+          name: "BaseMeetingInfoDetail",
+          path: path,
+          })
+          .then(({ visitedViews }) => {
+          this.$router.push({
+              path: path,
+              query: {
+                id: row.id,
+              },
+          });
+      });
+    },
     handleToAddress(){
       var path = "/base/addressInfo/list";
 
@@ -351,9 +360,6 @@ export default {
     this.changePage(1);
 
   },
-  components: {
-    "meetingInfo-detail": meetingInfoDetail,
-  }
 };
 </script>
 <style lang="scss" scoped>