فهرست منبع

新增报告和新增专题库弹窗

zhuliu 1 سال پیش
والد
کامیت
dcc71c5f69

+ 74 - 0
src/utils/model/Cascader/index.vue

@@ -0,0 +1,74 @@
+<template>
+  <div class="my_Cascader">
+    <slot name="content">
+        <div></div>
+    </slot>
+    <el-popover placement="bottom" popper-class="myCascader_popover" trigger="click">
+      <div class="myCascader">
+        <el-cascader-panel
+          v-bind="$attrs"
+          v-on="$listeners"
+          :props="props"    
+        ></el-cascader-panel>
+      </div>
+        <template #reference="scopeData">
+            <slot name="reference" v-bind="scopeData || {}"></slot>
+        </template>
+    </el-popover>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {
+    props:{
+        type:Object,
+        default:()=>{
+            return {
+                label:'label',
+                value:'value',
+                children:'children'
+            }
+        }
+    }
+  },
+  data() {
+    return {
+        chose:['1']
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {
+  },
+  methods: {},
+};
+</script>
+<style lang="scss">
+.myCascader{
+  .el-cascader-panel.is-bordered {
+    border: none;
+  }
+  .el-cascader-menu{
+    height: auto !important;
+    min-height: 100px;
+  }
+}
+.myCascader_popover{
+    padding: 0 !important;
+}
+</style>
+<style lang="scss" scoped>
+
+.myCascader {
+    max-height: 300px;
+    min-height: 100px;
+    overflow: auto;
+}
+.my_Cascader{
+    display: flex;
+    flex-wrap: wrap;
+}
+</style>

+ 3 - 1
src/utils/model/index.js

@@ -15,6 +15,7 @@ import mySelectTree from './selectTree/index'
 import myCard from './card/index'
 import myImageViewer from './imageViewer/index'
 import myUpload from './upload/index'
+import myCascader from './Cascader/index'
 
 var models = {
   myCustomSvg,
@@ -32,7 +33,8 @@ var models = {
   mySelectTree,
   myCard,
   myImageViewer,
-  myUpload
+  myUpload,
+  myCascader
 }
 export default {
   install(Vue) {

+ 15 - 64
src/utils/model/route.vue

@@ -1,12 +1,23 @@
 <template>
   <div>
-    <upload v-model="time"></upload>
-    <myUpload :multiple="true" accept=".png,.jpg"></myUpload>
+    <upload :options="[
+        {
+          label:'事件1',
+          value:'1'
+        },
+        {
+          label:'事件2',
+          value:'2'
+        },
+      ]">
+      <i slot="reference" class="el-icon-circle-plus-outline" style="font-size:20px;"></i>
+    </upload>
+    <!-- <myUpload :multiple="true" accept=".png,.jpg"></myUpload> -->
 
   </div>
 </template>
 <script>
-import upload from './date/index.vue'
+import upload from './Cascader/index.vue'
 export default {
   components:{
     upload
@@ -14,55 +25,7 @@ export default {
   data() {
     return {
       time:'2023',
-      isflag: false,
-      isMore: false,
-      tableData: [
-        {
-          date: "2016-05-03",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄"
-        },
-        {
-          date: "2016-05-02",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄"
-        },
-        {
-          date: "2016-05-04",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄"
-        },
-        {
-          date: "2016-05-03",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄"
-        },
-        {
-          date: "2016-05-02",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄"
-        },
-        {
-          date: "2016-05-04",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄"
-        },
-        {
-          date: "2016-05-03",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄"
-        },
-        {
-          date: "2016-05-02",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄"
-        },
-        {
-          date: "2016-05-04",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄"
-        }
-      ]
+
     };
   },
   watch:{
@@ -71,18 +34,6 @@ export default {
     }
   },
   methods: {
-    load() {
-      this.isMore = false;
-      this.isflag = true;
-      if (this.isflag) {
-        this.tableData = this.tableData.concat(this.tableData);
-        setTimeout(()=>{
-        this.isflag = false      
-        console.log(this.isflag)      
-        },1000)
-        
-      }
-    }
   }
 };
 </script>

+ 25 - 34
src/utils/model/upload/index.vue

@@ -5,14 +5,12 @@
         <el-upload
           class="upload-demo"
           :drag="drag"
-          :action="action"
           :multiple="multiple"
           :data="data"
           :name="name"
           :show-file-list="showFileList"
           :accept="accept"
           :list-type="listType"
-          :auto-upload="autoUpload"
           :disabled="disabled"
           :limit="limit"
           :on-preview="onPreview"
@@ -53,6 +51,7 @@
 export default {
   components: {},
   props: {
+    //上传的接口或地址
     action: {
       type: String,
       default: "",
@@ -82,6 +81,7 @@ export default {
       type: String,
       default: "text",
     },
+    //是否立即上传
     autoUpload: {
       type: Boolean,
       default: false,
@@ -102,7 +102,7 @@ export default {
   },
   data() {
     return {
-        discontent:[]
+      discontent: [],
     };
   },
   watch: {},
@@ -129,41 +129,32 @@ export default {
       if (this.accept) {
         var arr = this.accept.split(/,|,/g);
         var fileType = file.name.substring(file.name.lastIndexOf("."));
-        var index = arr.findIndex(item=>{
-            return item == fileType
-        })
-        if(index == -1){
-            this.discontent.push(file)
-            return false;
+        var index = arr.findIndex((item) => {
+          return item == fileType;
+        });
+        if (index == -1) {
+          this.discontent.push(file);
+          return false;
         }
       }
       this.$emit("on-change", file);
-    //   this.$nextTick(()=>{
-    //     if(this.discontent){
-    //         this.discontent = false
-    //         this.$message({
-    //             message: `上传文件只支持${ this.accept.replace(/,|,/g,',') }等格式!`,
-    //             type: "warning",
-    //         });
-    //     }
-    //   })
-      this.$nextTick(()=>{
-            var b = ''
-            if(this.discontent.length>0){
-                var arr = this.discontent.map(item=>{
-                    return item.name
-                })
-                this.$alert(`您上传的<span style='color:red'>${ arr.join(',') }</span>等文件格式不正确,请上传<span style='color:blue'>${ this.accept.replace(/,|,/g,',') }</span>等格式文件`, '提示', {
-                    dangerouslyUseHTMLString: true,
-                    confirmButtonText: '确定',
-                    type:'warning',
-                    callback: action => {
-                        this.discontent = []
-                    }
-                });
-                
+      this.$nextTick(() => {
+        if (this.discontent.length > 0) {
+          var arr = this.discontent.map((item) => {
+            return item.name;
+          });
+          this.$alert(`您上传的<span style='color:red'>${arr.join(",")}</span>等文件格式不正确,请上传<span style='color:blue'>${this.accept.replace(/,|,/g,",")}</span>等格式文件`,"提示",
+            {
+              dangerouslyUseHTMLString: true,
+              confirmButtonText: "确定",
+              type: "warning",
+              callback: (action) => {
+                this.discontent = [];
+              },
             }
-            })
+          );
+        }
+      });
     },
     onExceed(file, fileList) {
       this.$emit("on-exceed", file, fileList);

+ 1 - 1
src/views/components/mixins/index.js

@@ -7,7 +7,7 @@ export const getTableHeight={
     },
     methods: {
         getDivHeight(val){
-            this.tableHeight = val<200?200:val
+            this.tableHeight = val<300?300:val
             this.showTable = false
             this.$nextTick(()=>{
                 this.showTable = true

+ 6 - 1
src/views/product/components/index.vue

@@ -34,7 +34,7 @@
       </el-header>
       <el-main>
         <div style="height: 100%;">
-          <component :is="componentType" :tableData="tableData" :queryParams="queryParams" :searchOption="searchOption" :handleMessage="handleMessage"  @options="handleOption" @on-sort="handleSort" @optionsSon="handleOption2"></component>
+          <component :is="componentType" v-bind="$attrs" :tableData="tableData" :queryParams="queryParams" :searchOption="searchOption" :handleMessage="handleMessage"  @options="handleOption" @on-sort="handleSort" @optionsSon="handleOption2" @chooseItem="chooseItem"></component>
         </div>
       </el-main>
       <el-footer class="pagination">
@@ -139,6 +139,11 @@ export default {
     
   },
   methods: {
+    //获取子孙组件选择的值
+    chooseItem({row,type}){
+      this.$emit('chooseItem',{row,type})
+    },
+
     //获取检索字段以及分组字段
     async getColumn() {
       let params = ['productCategory']

+ 14 - 5
src/views/product/components/view/categoryTable.vue

@@ -5,15 +5,15 @@
       <el-table-column type="expand">
         <!-- 产品 -->
         <template slot-scope="scope">
-          <div style="padding: 10px;height: 340px;">
-            <component :is="componentType" :row="scope.row"  v-bind="$attrs" v-on="$listeners"></component>
+          <div style="padding: 10px;">
+            <component :is="componentType" :row="scope.row" :isChoose="isChoose"  v-bind="$attrs" v-on="$listeners"></component>
           </div>
         </template>
       </el-table-column>
       <el-table-column v-for="item in column" :key="item.value" :prop="item.value" :label="item.name" align="center" sortable="custom">
         <template slot-scope="scope">
           <div v-if="['name'].includes(item.value)">
-            <el-link @click="handleItem(scope.row, item.value)">{{ scope.row[item.value] }}</el-link>
+            <el-link @click="handleItem(scope.row, item.value)" :type="isChoose?'primary':'default'">{{ scope.row[item.value] }}</el-link>
           </div>
           <div v-else v-html="$commonJS.getColumnData(scope.row, item)">
           </div>
@@ -89,7 +89,9 @@ export default {
           },
         ]
       }
-    }
+    },
+    //选择
+    isChoose:false
   },
   data() {
     return {
@@ -102,7 +104,14 @@ export default {
   mounted() {
   },
   methods: {
- 
+    //查看详情
+    handleItem(row){
+      if(this.isChoose){
+        this.$emit('chooseItem',{row:row,type:'3'})
+        return false
+      }
+
+    },
    
     // 展开行打开或者关闭事件
     handleExpand(row, rowList) {

+ 12 - 2
src/views/product/components/view/productTable.vue

@@ -31,7 +31,7 @@
       <el-table-column v-for="item in column" :key="item.value" :prop="item.value" :label="item.name" align="center" sortable="custom">
         <template slot-scope="scope">
           <div v-if="['name'].includes(item.value)">
-            <el-link @click="handleItem(scope.row, item.value)">{{ scope.row[item.value] }}</el-link>
+            <el-link @click="handleItem(scope.row, item.value)" :type="isChoose?'primary':'default'">{{ scope.row[item.value] }}</el-link>
           </div>
           <div v-else v-html="$commonJS.getColumnData(scope.row, item)">
           </div>
@@ -127,7 +127,9 @@ export default {
         ]
       }
     },
-    handleMessage:''
+    handleMessage:'',
+    //是否选择
+    isChoose:false
 
   },
   data() {
@@ -166,6 +168,14 @@ export default {
     }
   },
   methods: {
+    //查看详情
+    handleItem(row){
+      if(this.isChoose){
+        this.$emit('chooseItem',{row:row,type:'2'})
+        return false
+      }
+
+    },
     //更新数据
     updateData(){
       if(this.action.type == 1){

+ 150 - 20
src/views/project/components/drawer/form.vue

@@ -31,14 +31,33 @@
               <mySelectTree style="width:100%" v-model="ruleForm.departmentId" :options="departmentList"></mySelectTree>
             </el-form-item>
             <el-form-item label="负责人" prop="person">
-              <el-select style="width:100%" v-model="ruleForm.personnelId" filterable remote clearable placeholder="请选择"
+              <el-select style="width:100%" v-model="ruleForm.headId" filterable remote clearable placeholder="请选择"
                 :loading="loading" v-SelectLazyLoading="lazyLoading" :remote-method="remoteMethod">
                 <el-option v-for="item in personnelList" :key="item.id" :label="item.name" :value="item.id">
                 </el-option>
               </el-select>
             </el-form-item>
+            <el-form-item label="事件" prop="event">
+              <div v-if="showEvent" style="display:flex">
+                <span>
+                  <el-tag
+                    v-for="tag in ruleForm.eventList"
+                    :key="tag.value"
+                    closable
+                    type='info'
+                    >
+                    {{tag.eventName}} - {{ tag.scenario }}
+                  </el-tag>
+                </span>
+                <span style="margin-left:10px">
+                  <my-cascader :options="eventList" @change="change">
+                    <i slot="reference" class="el-icon-circle-plus-outline" style="font-size:20px;"></i>
+                  </my-cascader>
+                </span>
+              </div>
+            </el-form-item>
             <el-form-item label="应用场景" prop="scenarioList">
-              <el-checkbox-group v-model="ruleForm.scenarioList" @change="onChange">
+              <el-checkbox-group v-model="ruleForm.scenarios" @change="onChange">
                 <el-checkbox v-for="item in commonData.ENTERPRISE_APPLICATION_SCENARIO" :key="item.value"
                   :label="parseInt(item.value)">{{ item.label }}</el-checkbox>
               </el-checkbox-group>
@@ -62,16 +81,31 @@
                 </div>
               </el-checkbox-group>
             </el-form-item>
-            <el-form-item label="产品类别/产品" prop="productId" v-if="$permission('/workspace/product')">
+            <template>
               <div>
-                <mySelectButton size='large' style="width:100%">
-                  <div slot="select" style="width:100%">
-                    <mySelectTree style="width:100%" v-model="ruleForm.departmentId" :options="departmentList">
-                    </mySelectTree>
+                <el-form-item label="产品类别/产品" prop="productId" v-if="$permission('/workspace/product')">
+                  <div>
+                    <!-- <mySelectButton size='large' style="width:100%">
+                      <div slot="select" style="width:100%">
+                        <mySelectTree style="width:100%" v-model="ruleForm.departmentId" :options="departmentList">
+                        </mySelectTree>
+                      </div>
+                    </mySelectButton> -->
+                    <div v-if="ruleForm.products">
+                      {{ ruleForm.products.name }}
+                      <span style="color:blue">
+                        ({{ ruleForm.products.treeType==2?'产品':'产品类别' }})
+                      </span>
+                      <span><i class="el-icon-error cursor_pointer" @click="delProduct"></i></span>
+                    </div>
+                    <el-button size="small" v-else @click="choseProduct">+ 选择</el-button>
                   </div>
-                </mySelectButton>
+                </el-form-item>
+                <el-form-item label="分类架构" prop="structureId" v-if="ruleForm.products && ruleForm.products.fieldId && $permission('/workspace/product')">
+                  <my-select-Tree style="width:100%" :options="structureList" @getValue="getStructureId" :props="StructureProp" :value="ruleForm.structureId"></my-select-Tree>
+                </el-form-item>
               </div>
-            </el-form-item>
+            </template>
             <el-row :gutter="24">
               <el-col :span="12">
                 <el-form-item label="合同号" prop="contractNo">
@@ -79,15 +113,15 @@
                 </el-form-item>
               </el-col>
               <el-col :span="12">
-                <el-form-item label="内部案卷" prop="innerFile">
-                  <el-input v-model="ruleForm.innerFile" placeholder="请输入内部案卷"></el-input>
+                <el-form-item label="内部案卷" prop="volumeNumber">
+                  <el-input v-model="ruleForm.volumeNumber" placeholder="请输入内部案卷"></el-input>
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row :gutter="24">
               <el-col :span="12">
-                <el-form-item label="委案日" prop="caseDate">
-                  <el-date-picker v-model="ruleForm.caseDate" value-format="yyyy-MM-dd" type="date" placeholder="请选择委案日"
+                <el-form-item label="委案日" prop="commissionCaseDay">
+                  <el-date-picker v-model="ruleForm.commissionCaseDay" value-format="yyyy-MM-dd" type="date" placeholder="请选择委案日"
                     class="width_100"></el-date-picker>
                 </el-form-item>
               </el-col>
@@ -100,8 +134,8 @@
                 </el-form-item>
               </el-col>
             </el-row>
-            <el-form-item label="备注" prop="remark">
-              <el-input v-model="ruleForm.remark" placeholder="请输入备注" type="textarea"></el-input>
+            <el-form-item label="备注" prop="description">
+              <el-input v-model="ruleForm.description" placeholder="请输入备注" type="textarea"></el-input>
             </el-form-item>
           </el-form>
         </el-main>
@@ -117,15 +151,24 @@
       top="10vh">
       <ClientTable :choseClient="true" @getClient="getClient"></ClientTable>
     </el-dialog>
+
+    <el-dialog title="选择产品或产品类别" :visible.sync="productVisible" width="1000px" append-to-body destroy-on-close :before-close="closeProduct">
+      <div style="height:550px">
+        <product :isChoose="true" @chooseItem="chooseItem"></product>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import ClientTable from '@/views/client'
 import { mapGetters } from 'vuex';
+
+import product from '@/views/product/components/index.vue'
 export default {
   components: {
-    ClientTable
+    ClientTable,
+    product
   },
   props: {
     commonData: Object
@@ -164,6 +207,27 @@ export default {
         type: 'ENTERPRISE_APPLICATION_SCENARIO',
         flag: 1
       },
+      //事件列表
+      eventList:[
+        {
+          label:'事件1',
+          value:'1',
+          children:[
+            {
+              label:'1-1',
+              value:'3'
+            }
+          ]
+        },
+        {
+          label:'事件2',
+          value:'2'
+        },
+      ],
+      showEvent:true,
+      //选择产品或产品类别
+      productVisible:false,
+
     };
   },
   watch: {},
@@ -174,13 +238,79 @@ export default {
   mounted() {
   },
   methods: {
+    //获取架构id
+    getStructureId(val){
+
+    },
+    //获取选中的值
+    chooseItem({row,type}){
+      this.ruleForm.products = {
+              treeType:type,
+              fieldId:row.id,
+              name:row.name,
+              valueIds:[]
+      }
+      this.closeProduct()
+    },
+    //删除选择的产品或产品类别
+    delProduct(){
+      this.ruleForm.products = null
+      this.$forceUpdate()
+      // this.ruleForm.products=null
+    },
+    //打开选择产品或产品类别弹窗
+    choseProduct(){
+      this.productVisible = true
+
+    },
+    //关闭弹窗
+    closeProduct(){
+      this.productVisible = false
+    },
+    //选择事件
+    change(value){
+      if(this.ruleForm.eventList){
+        
+      }else{
+        this.ruleForm.eventList = []
+      }
+      var index = this.ruleForm.eventList.findIndex(item=>{
+        return item.eventId == value[0] && item.scenarioId == value[1]
+      })
+      if(index != -1){
+        this.$message.warning('该调查类型已存在')
+        this.showEvent = false
+        this.$nextTick(()=>{
+          this.showEvent = true
+        })
+        return false
+      }
+      var obj = {}
+        var arr = this.eventList.find(item=>{
+            return item.value == value[0]
+        })
+        obj.eventName = arr.label
+        obj.eventId = arr.value
+        if(value.length>1){
+          var arr2 = arr.children.find(item=>{
+                return item.value == value[1]
+              })
+          obj.scenario = arr2.label
+          obj.scenarioId = arr2.value
+        }
+      this.ruleForm.eventList.push(obj)
+      this.showEvent = false
+      this.$nextTick(()=>{
+        this.showEvent = true
+      })
+    },
     //打开弹窗
     open(form, title) {
       //获取部门列表
       this.getDepartment()
       //获取人员列表
       this.getPersonnelList()
-      this.ruleForm = form
+      this.ruleForm = JSON.parse(JSON.stringify(form))
       this.title = title
       this.drawer = true
     },
@@ -220,11 +350,11 @@ export default {
     },
     //输入框输入事件(委托方)
     input() {
-      this.$set(this.ruleForm, 'clientId', -1)
+      this.$set(this.ruleForm, 'entrustId', -1)
     },
     //切换选择委托方
     handleChange(row) {
-      this.$set(this.ruleForm, 'clientId', row.id)
+      this.$set(this.ruleForm, 'entrustId', row.id)
       this.$set(this.ruleForm, 'clientName', row.name)
       this.close2()
     },
@@ -234,7 +364,7 @@ export default {
     },
     //获取委托方信息
     getClient(row) {
-      this.$set(this.ruleForm, 'clientId', row.id)
+      this.$set(this.ruleForm, 'entrustId', row.id)
       this.$set(this.ruleForm, 'clientName', row.name)
       this.close2()
     },

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

@@ -316,7 +316,7 @@ export default {
         status: '0',
         sort: 1,
         typeList: [],
-        scenarioList: []
+        scenarios: []
       }, '新增专题库')
     },
     //确认提交专题库信息