Kaynağa Gözat

会议管理

yanliming 4 yıl önce
ebeveyn
işleme
a465b4eb79

+ 4 - 1
src/api/base/meetingInfo.js

@@ -41,7 +41,10 @@ function batchRemove(idList) {
   });
 }
 
+function personListByCompanyId(formData) {
+  return request.post(constant.serverUrl + "/base/meetingInfo/personListByCompanyId", formData);
+}
 
 export default {
-  create, edit, add, update, remove, batchRemove, pageList
+  create, edit, add, update, remove, batchRemove, pageList,personListByCompanyId
 }

+ 281 - 109
src/views/base/meetingInfo-detail.vue

@@ -18,6 +18,14 @@
   margin-left: 10px;
   text-align: left;
 }
+
+ .opSetting{
+    text-align: center;
+    margin-top:120px;
+  }
+  .spacing{
+    margin-top:10px;
+  }
 </style>
 <template>
   <div>
@@ -67,13 +75,13 @@
           </el-select>
            <el-button type="primary" style="margin-left: 20px">添加地点</el-button>
         </el-form-item>
-        <el-form-item label="会议日期" prop="meetingDate">
+        <!-- <el-form-item label="会议日期" prop="meetingDate">
           <el-input
             v-model="formModel.meetingDate"
             placeholder="请输入详细地址"
             style="width: 300px"
           ></el-input>
-        </el-form-item>
+        </el-form-item> -->
                 <el-form-item label="会议内容" prop="content">
           <el-input
             v-model="formModel.content"
@@ -90,57 +98,74 @@
         </el-form-item>
         <h4>会议配置</h4>
 
-        <el-table :data="formModel.meetingTimeList">
+        <el-table :data="formModel.meetingTimeDataList">
             <el-table-column
               type="index"
               label="序号"
               width="55"
             ></el-table-column>
-            <el-table-column prop="name" label="会议日期" width="270px">
-                <el-form-item>
+            <el-table-column prop="meetingDate" label="会议日期" width="270px">
+              <template slot-scope="scope">
+                <el-form-item 
+                :prop="'meetingTimeDataList.' + scope.$index + '.meetingDate'">
                   <el-date-picker
-                    v-model="value1"
+                    v-model="scope.row.meetingDate"
                     type="date"
                     placeholder="选择日期">
                   </el-date-picker>
                 </el-form-item>
+              </template>
             </el-table-column>
-            <el-table-column prop="classify" label="会议时间" width="400px">
-               <el-form-item>
-                <el-time-picker
-                  is-range
-                  v-model="value1"
-                  range-separator="至"
-                  start-placeholder="开始时间"
-                  end-placeholder="结束时间"
-                  placeholder="选择时间范围">
-                </el-time-picker>
-               </el-form-item>
+            <el-table-column prop="meetingTimeRange" label="会议时间" width="400px">
+              <template slot-scope="scope">
+                <el-form-item 
+                :prop="'meetingTimeDataList.' + scope.$index + '.meetingTimeRange'">
+                  <el-time-picker
+                    is-range
+                    v-model="scope.row.meetingTimeRange"
+                    range-separator="至"
+                    start-placeholder="开始时间"
+                    end-placeholder="结束时间"
+                    placeholder="选择时间范围"
+                    format='HH:mm'
+                    value-format="HH:mm">
+                  </el-time-picker>
+                </el-form-item>
+              </template>
             </el-table-column>
-            <el-table-column prop="location" label="会前签到时间" width="400px">
-                <el-form-item>
+            <el-table-column prop="startSignInTimeRange" label="会前签到时间" width="400px">
+               <template slot-scope="scope">
+                <el-form-item
+                :prop="'meetingTimeDataList.' + scope.$index + '.startSignInTimeRange'">
                   <el-time-picker
                     is-range
-                    v-model="value1"
+                    v-model="scope.row.startSignInTimeRange"
                     range-separator="至"
                     start-placeholder="开始时间"
                     end-placeholder="结束时间"
-                    placeholder="选择时间范围">
+                    placeholder="选择时间范围"
+                    format='HH:mm'
+                    value-format="HH:mm">
                   </el-time-picker>
                 </el-form-item>
+               </template>
             </el-table-column>
-            <el-table-column prop="name" label="结束签到时间" width="400px">
-
-                <el-form-item>
+            <el-table-column prop="endSignInTimeRange" label="结束签到时间" width="400px">
+                <template slot-scope="scope">
+                <el-form-item 
+                :prop="'meetingTimeDataList.' + scope.$index + '.endSignInTimeRange'">
                   <el-time-picker
                     is-range
-                    v-model="value1"
+                    v-model="scope.row.endSignInTimeRange"
                     range-separator="至"
                     start-placeholder="开始时间"
                     end-placeholder="结束时间"
-                    placeholder="选择时间范围">
+                    placeholder="选择时间范围"
+                    format='HH:mm'
+                    value-format="HH:mm">
                   </el-time-picker>
                 </el-form-item>
+                </template>
             </el-table-column>
             <el-table-column label="操作" width="150">
               <template slot-scope="{ row }">
@@ -149,15 +174,6 @@
                     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>
@@ -173,7 +189,7 @@
 
           <div
             class="el-table__empty-block"
-            v-if="formModel.meetingTimeList.length != 0"
+            v-if="formModel.meetingTimeDataList.length != 0"
           >
             <el-button icon="el-icon-circle-plus-outline" @click="handleAdd()"
               >新增</el-button
@@ -182,34 +198,35 @@
 
         <h4>添加参会人员</h4>
         <el-row>
-          <el-form-item label="部门" prop="companyInfoId">
-            <el-input
-              v-model="formModel.companyInfoId"
-              placeholder="请输入会议编号"
-              style="width: 200px"
+          <el-form-item label="部门" prop="searchCompanyId">
+            <el-select-tree
               size="mini"
-            ></el-input>
+              :props="props"
+              :options="companyResult"
+              v-model="formModel.searchCompanyId"
+              height="200"
+            ></el-select-tree>&nbsp;
+            <el-button type="primary" size="mini" @click="hanldSeach">查询</el-button>
           </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-col :span="11">
+            <el-form-item label="参会人员" >
+            <el-transfer
+                v-model="value"
+                :data="leftTableData"
+                :titles="['全部人员', '参会人员']"
+                style="width:100%">
+              </el-transfer>
+              </el-form-item>
+          </el-col>
         </el-row>
       </el-form>
     </div>
     <span slot="footer" class="dialog-footer">
       <el-button @click="closeDialog">取 消</el-button>
       <el-button type="primary" @click="handleSubmit" :loading="submitting"
-        >确 定</el-button
+        >保  存</el-button
       >
     </span>
   </div>
@@ -218,47 +235,74 @@
 import meetingInfoApi from "@/api/base/meetingInfo";
 import addressInfoApi from "@/api/base/address";
 import "nprogress/nprogress.css"; // progress bar style
+import SelectTree from "@/components/SelectTree";
+import companyInfoApi from "@/api/base/companyInfo";
 
 export default {
   name: "baseMeetingDetail",
   props: ["businessKey", "title"],
   data() {
-    const generateData = _ => {
-        const data = [];
-        const cities = ['上海', '北京', '广州', '深圳', '南京', '西安', '成都'];
-        const pinyin = ['shanghai', 'beijing', 'guangzhou', 'shenzhen', 'nanjing', 'xian', 'chengdu'];
-        cities.forEach((city, index) => {
-          data.push({
-            label: city,
-            key: index,
-            pinyin: pinyin[index]
-          });
-        });
-        return data;
-    };
-
+    //   const generateData = _ => {
+    //     const data = [];
+    //     const cities = ['上海', '北京', '广州', '深圳', '南京', '西安', '成都'];
+    //     const pinyin = ['shanghai', 'beijing', 'guangzhou', 'shenzhen', 'nanjing', 'xian', 'chengdu'];
+    //     cities.forEach((city, index) => {
+    //       data.push({
+    //         label: city,
+    //         key: index,
+    //       });
+    //     });
+    //     alert(JSON.stringify(data));
+    //     return data;
+    // };
     return {
-        data: generateData(),
-        value:[],
-        formModel: {
-          addressId:"",
-          meetingTimeList: [],
-          removeMeetingTimeList: []
-        },
-        ruleValidate: {
-            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,
-        filterMethod(query, item) {
-            return item.pinyin.indexOf(query) > -1;
-        },
+      //data:generateData(),
+      value:[],
+      formModel: {
+        number:"",
+        name:"",
+        addressId:"",
+        content:"",
+        remark:"",
+        meetingTimeDataList: [],
+        removeMeetingTimeList: [],
+        meetingDate:"",
+        meetingTime:"",
+        meetingTimeRange:"",
+        startSignInTimeRange:"",
+        endSignInTimeRange:"",
+        searchCompanyId:"",
+        selectPersonKey:"",
+        meetingTimeArray:[],
+      },
+      tableLoading:false,
+      tableHeight:400,
+      ruleValidate: {
+          number: [{ required: true, message: "会议编号不能为空", trigger: "blur" }],
+          name: [{ required: true, message: "会议名称不能为空", trigger: "blur" }],
+          addressId: [{ required: true, message: "会议地点不能为空", trigger: "blur" }],
+          meetingDate: [{ required: true, message: "会议地点名称不能为空", trigger: "blur" }],
+
+      },
+      meetingId:"",
+      addressList:[],
+      treeData: [],
+      companyResult:[],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      },
+      showDialog: true,
+      loading: false,
+      submitting: false,
+      selectArr:[],  // 右边列表
+      buttonSize: 'large',
+      options: [],
+      leftTableData:[],
+      nowSelectData: [], // 左边选中列表数据
+      nowSelectRightData: [], 
     };
   },
   created() {
@@ -269,11 +313,58 @@ export default {
         self.addressList = jsonData.data;
       }
     });
+
+    companyInfoApi.list().then(function(response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        self.companyResult = jsonData.data;
+      }
+    });
+
+    // var companyId = "";
+    // meetingInfoApi.personListByCompanyId(companyId).then(function(response) {
+    //   var jsonData = response.data;
+    //   if (jsonData.result) {
+    //     self.leftTableData = jsonData.data;
+    //   }
+    // });
+
+
   },
   methods: {
     closeDialog() {
       this.$emit("close", false);
     },
+    hanldSeach(){
+      var self = this;
+
+      self.tableLoading = true;
+
+      var formData = new FormData();
+      formData.append("companyId", this.formModel.searchCompanyId);
+      meetingInfoApi.personListByCompanyId(formData).then(function(response) {
+        var jsonData = response.data;
+        if (jsonData.result) {
+          self.tableLoading = false;
+
+          //alert(JSON.stringify(jsonData.data));
+          self.leftTableData = jsonData.data;
+        }
+      });
+
+        // const data = [];
+        // const cities = ['上海', '北京', '广州', '深圳', '南京', '西安', '成都'];
+        // const pinyin = ['shanghai', 'beijing', 'guangzhou', 'shenzhen', 'nanjing', 'xian', 'chengdu'];
+        // cities.forEach((city, index) => {
+        //   data.push({
+        //     desc: city,
+        //     value: index,
+        //     pinyin: pinyin[index]
+        //   });
+        // });
+        // self.leftTableData = data;
+
+    },
     handleSubmit() {
       var self = this;
 
@@ -282,6 +373,26 @@ export default {
           (function () {
             var id = self.formModel.id;
 
+            var selectPersonKey = self.value;
+
+            self.formModel.selectPersonKey = selectPersonKey.toString();
+
+            if(self.formModel.meetingTimeDataList!=null){
+              self.formModel.meetingTimeDataList.forEach(function(item) {  
+                  if(item.meetingTimeRange!=null){
+                    item.meetingTimeRange=item.meetingTimeRange.toString();
+                  }
+                  if(item.startSignInTimeRange!=null){
+                    item.startSignInTimeRange=item.startSignInTimeRange.toString();
+                  }
+                  if(item.endSignInTimeRange!=null){
+                    item.endSignInTimeRange = item.endSignInTimeRange.toString();
+                  }
+              });  
+            }
+
+            //alert(JSON.stringify(self.formModel.meetingTimeDataList));
+
             if (id == null || id.length == 0) {
               return meetingInfoApi.add(self.formModel);
             } else {
@@ -310,49 +421,89 @@ export default {
       });
     },
     handleAdd() {
-      this.formModel.meetingTimeList.push({
-        sortNo: this.formModel.meetingTimeList.length + 1,
-        name: "",
-        routeId: this.businessKey,
-        classify: "",
-        location: "",
-        delFlag: 0,
+      this.formModel.meetingTimeDataList.push({
+        sortNo: this.formModel.meetingTimeDataList.length + 1,
+        meetingDate: "",
+        meetingTimeRange: "",
+        startSignInTimeRange: "",
+        endSignInTimeRange: "",
       });
     },
     handleDelete(row) {
-      var meetingTimeList = this.formModel.meetingTimeList;
+      var meetingTimeDataList = this.formModel.meetingTimeDataList;
 
-      meetingTimeList.splice(meetingTimeList.indexOf(row), 1);
+      meetingTimeDataList.splice(meetingTimeDataList.indexOf(row), 1);
 
       this.formModel.removeMeetingTimeList.push(row);
     },
     handleUp(row) {
-      var meetingTimeList = this.formModel.meetingTimeList;
-      var index = meetingTimeList.indexOf(row);
+      var meetingTimeDataList = this.formModel.meetingTimeDataList;
+      var index = meetingTimeDataList.indexOf(row);
 
       if (index > 0) {
-        meetingTimeList.splice(index, 1);
-        meetingTimeList.splice(index - 1, 0, row);
+        meetingTimeDataList.splice(index, 1);
+        meetingTimeDataList.splice(index - 1, 0, row);
       }
     },
     handleDown(row) {
-      var meetingTimeList = this.formModel.meetingTimeList;
-      var index = meetingTimeList.indexOf(row);
+      var meetingTimeDataList = this.formModel.meetingTimeDataList;
+      var index = meetingTimeDataList.indexOf(row);
 
-      if (index < meetingTimeList.length - 1) {
-        meetingTimeList.splice(index, 1);
-        meetingTimeList.splice(index + 1, 0, row);
+      if (index < meetingTimeDataList.length - 1) {
+        meetingTimeDataList.splice(index, 1);
+        meetingTimeDataList.splice(index + 1, 0, row);
       }
     },
+
+    checkAll(val){
+      this.nowSelectData = val;
+    },
+    checkRightAll(val) {
+      this.nowSelectRightData = val;
+    },
+    // 选中
+    handelSelect(){   
+      this.selectArr = this.handleConcatArr(this.selectArr, this.nowSelectData) 
+      this.handleRemoveTabList(this.nowSelectData,  this.data1);
+      this.nowSelectData = [];
+   },
+    // 取消
+    handleRemoveSelect() {
+      this.data1 = this.handleConcatArr(this.data1, this.nowSelectRightData) 
+      this.handleRemoveTabList(this.nowSelectRightData,  this.selectArr);
+      this.nowSelectRightData = [];
+    },
+    handleConcatArr(selectArr, nowSelectData) {
+      let arr = [];
+      arr = arr.concat(selectArr, nowSelectData);   
+      return arr;
+    },
+    handleRemoveTabList(isNeedArr,  originalArr) {
+      if(isNeedArr.length && originalArr.length) {
+         for(let i=0; i<isNeedArr.length; i++) {
+            for(let k=0; k<originalArr.length; k++) {
+              if(isNeedArr[i]["name"] === originalArr[k]["name"]) {
+                originalArr.splice(k, 1);   
+              }
+            }
+         }
+      }
+    }
+
+  },
+  components: {
+    "el-select-tree": SelectTree,
   },
   mounted: function () {
     var self = this;
 
+    self.meetingId = this.$route.query.businessKey;
+
     (function () {
-      if (self.businessKey.length == 0) {
+      if (self.meetingId.length == 0) {
         return meetingInfoApi.create();
       } else {
-        return meetingInfoApi.edit(self.businessKey);
+        return meetingInfoApi.edit(self.meetingId);
       }
     })()
       .then((response) => {
@@ -360,7 +511,28 @@ export default {
         self.loading = false;
 
         if (jsonData.result) {
+        
+          if(jsonData.data.meetingTimeDataList!=null){
+              jsonData.data.meetingTimeDataList.forEach(function(item) {  
+                  item.meetingTimeRange = item.meetingTimeArray;
+                  item.startSignInTimeRange = item.startSignInTimeArray;
+                  item.endSignInTimeRange = item.endSignInTimeArray;
+              }); 
+          }
+
           self.formModel = jsonData.data;
+
+          if(jsonData.data.selectPersonKey!=null){
+             var selectPersonKey = jsonData.data.selectPersonKey.split(",");
+             self.value = selectPersonKey;
+             
+          }
+
+          if(jsonData.data.searchCompanyId!=null&&jsonData.data.searchCompanyId!=""){
+              this.hanldSeach();
+          }
+
+
         } else {
           self.$message.error(jsonData.message + "");
         }

+ 1 - 1
src/views/base/meetingInfo-list.vue

@@ -336,7 +336,7 @@ export default {
           this.$router.push({
               path: path,
               query: {
-                id: row.id,
+                businessKey: row.id,
               },
           });
       });