Sfoglia il codice sorgente

暂存,工作任务

qymljy 2 anni fa
parent
commit
9a3765e232
27 ha cambiato i file con 908 aggiunte e 54 eliminazioni
  1. 21 4
      src/Form/competitor/add.vue
  2. 1 1
      src/Form/competitor/edit.vue
  3. 9 3
      src/Form/projectStageMag/add.vue
  4. 7 1
      src/Form/projectStageMag/edit.vue
  5. 381 0
      src/Form/projectTask/add.vue
  6. 15 0
      src/Form/projectTask/edit.vue
  7. 5 6
      src/HDrpManagement/competitor/detail/index.vue
  8. 1 1
      src/HDrpManagement/competitor/detail/modules/addressManage/list.vue
  9. 1 1
      src/HDrpManagement/competitor/detail/modules/addressManage/modules/add.vue
  10. 1 1
      src/HDrpManagement/competitor/detail/modules/competeProjects/list.vue
  11. 1 1
      src/HDrpManagement/competitor/detail/modules/competeProjects/modules/add.vue
  12. 1 1
      src/HDrpManagement/competitor/detail/modules/contacts/list.vue
  13. 1 1
      src/HDrpManagement/competitor/detail/modules/contacts/modules/add.vue
  14. 8 7
      src/HDrpManagement/competitor/detail/modules/detailedData.vue
  15. 1 1
      src/HDrpManagement/competitor/detail/modules/toVoid.vue
  16. 27 18
      src/HDrpManagement/competitor/index.vue
  17. 1 1
      src/HDrpManagement/projectChange/modules/detail.vue
  18. 1 1
      src/HDrpManagement/projectChange/modules/modules/andEnterprise/index.vue
  19. 1 1
      src/HDrpManagement/projectChange/modules/modules/clue/index.vue
  20. 2 2
      src/HDrpManagement/projectChange/modules/modules/productSet/index.vue
  21. 1 1
      src/HDrpManagement/projectChange/modules/modules/quotation/index.vue
  22. 90 0
      src/HDrpManagement/projectTask/detail/index.vue
  23. 95 0
      src/HDrpManagement/projectTask/index.vue
  24. 108 0
      src/HDrpManagement/projectTask/modules/AssociateCustomerObject.vue
  25. 106 0
      src/HDrpManagement/projectTask/modules/AssociatedProjectStage.vue
  26. 1 1
      src/components/normal-basic-layout/details/index.vue
  27. 21 0
      src/router/HDrpManagement.js

+ 21 - 4
src/Form/competitor/add.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-button size="mini" type="primary" @click="onShow">新 建</el-button>
+    <el-button size="small" type="primary" @click="onShow">新 建</el-button>
     <el-drawer
         title="创建竞争对手"
         :visible.sync="dialogFormVisible"
@@ -107,9 +107,16 @@ export default {
         this.tool.showMessage(res,()=>{
           this.$emit('onSuccess')
           this.$refs['form'].resetFields();
-          this.form.advantage = ''
-          this.form.inferiority = ''
-          this.form.remarks = ''
+          this.form = {
+            sa_competitorid:0,
+            sys_enterpriseid:"",
+            enterprisename:"",
+            brandname:"",
+            inferiority:"",
+            advantage:"",
+            remarks:"",
+            enterpriseid:""
+          }
           this.dialogFormVisible = false
         })
       })
@@ -149,6 +156,16 @@ export default {
     onClose(){
       this.dialogFormVisible = false
       this.$refs['form'].resetFields()
+      this.form = {
+        sa_competitorid:0,
+        sys_enterpriseid:"",
+        enterprisename:"",
+        brandname:"",
+        inferiority:"",
+        advantage:"",
+        remarks:"",
+        enterpriseid:""
+      }
     }
   }
 }

+ 1 - 1
src/Form/competitor/edit.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-button size="mini"  :type="btnType?btnType:'text'"  @click="show" >编 辑</el-button>
+    <el-button size="mini"    @click="show" >编 辑</el-button>
     <el-drawer
         title="编辑竞争对手"
         :visible.sync="dialogFormVisible"

+ 9 - 3
src/Form/projectStageMag/add.vue

@@ -74,7 +74,7 @@ export default {
         "stagename": "",
         "remarks": "",
         "allprojecttype":0,
-        "sequence":'',
+        "sequence":0,
         "projecttype":["水务","燃气"]
       },
       rules:{
@@ -87,6 +87,9 @@ export default {
         projecttype: [
           { required: true, message: '还未选择项目类型', trigger: 'change' },
         ],
+        sequence: [
+          { required: true, message: '请输入顺序', trigger: 'change' },
+        ],
       },
       param:{
         "classname": "sysmanage.develop.optiontype.optiontype",
@@ -163,8 +166,11 @@ export default {
     },
     checkboxCallBack(val){
       this.selectType = []
-      val.forEach((item,index)=>{
-        this.selectType[index] = item.value
+      this.selectType = val.map(e=>{
+        return {
+          type:e.value,
+          remarks:e.remarks
+        }
       })
       this.$nextTick(()=>{
         if (this.selectType.length < this.total){

+ 7 - 1
src/Form/projectStageMag/edit.vue

@@ -136,8 +136,14 @@ export default {
     },
     checkboxCallBack(val){
       this.selectType = []
-      val.forEach((item,index)=>{
+      /*val.forEach((item,index)=>{
         this.selectType[index] = item.value
+      })*/
+      this.selectType = val.map(e=>{
+        return {
+          type:e.value,
+          remarks:e.remarks
+        }
       })
       this.$nextTick(()=>{
         if (this.selectType.length < this.total){

+ 381 - 0
src/Form/projectTask/add.vue

@@ -0,0 +1,381 @@
+<template>
+  <div>
+    <el-button size="small" type="primary"  @click="onShow">新 建</el-button>
+    <el-drawer
+        title="新建工作任务"
+        :visible.sync="drawer"
+        size="45%"
+        direction="rtl"
+        append-to-body
+        :show-close="false"
+        @close="onClose">
+      <div class="drawer__panel" style="margin-bottom: 0px;padding-bottom: 0px">
+        <el-row>
+          <el-form :model="form" :rules="rules" ref="formData"  size="mini" label-position="right">
+            <el-col :span="20">
+              <el-form-item label="工作任务:" label-width="85px" prop="taskname">
+                <el-input v-model="form.taskname" autocomplete="off" placeholder="输入工作任务"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="4">
+              <el-form-item label="顺序:" label-width="80px">
+                <el-input  v-model="form.sequence" autocomplete="off" placeholder="输入顺序"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="关键任务:" label-width="85px">
+                <el-radio v-model="form.important" label="1">是</el-radio>
+                <el-radio v-model="form.important" label="0">否</el-radio>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item >
+                <el-checkbox v-model="form.onparties">关联客户对象</el-checkbox>
+                <AssociateCustomerObject ref="onparties" :data="form" class="inline-16" style="margin-left: 10px" @selectObject="selectObject"></AssociateCustomerObject>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item >
+                <el-checkbox v-model="form.onstage" style="font-size: 14px">关联项目阶段</el-checkbox>
+                <AssociatedProjectPhases ref="onstage" :data="form" class="inline-16" style="margin-left: 10px" @selectStage="selectStage"></AssociatedProjectPhases>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="drawer__panel">
+        <el-row>
+          <el-form ref="form"  size="mini" label-position="right">
+            <el-col :span="22">
+              <el-form-item label="评估项:" label-width="60px" >
+              </el-form-item>
+            </el-col>
+            <el-col :span="2">
+              <el-form-item  style="float: right;width: 100%;">
+                <el-button size="small" type="primary" plain style="width: 100%" @click="addOptions">添加</el-button>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" >
+              <el-form-item  style="float: right;width: 100%;text-align: center">
+                <el-table
+                    :data="form.projtaskmag_options"
+                    style="width: 100%">
+                  <el-table-column
+                      prop="optionname"
+                      label="任务内容"
+                      width="360">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.optionname" placeholder=""></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                      prop="remarks"
+                      label="描述"
+                      width="0">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.remarks" placeholder=""></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                      prop="score"
+                      width="160"
+                      label="独立项分值">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.score" placeholder=""></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                      prop="operation"
+                      width="100"
+                      label="操作">
+                    <template slot-scope="scope">
+                      <el-button type="text" size="mini" :disabled="form.projtaskmag_options.length === 1">删除</el-button>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="drawer__panel">
+        <el-row>
+          <el-form ref="form"  size="mini" label-position="right">
+            <el-col :span="22">
+              <el-form-item label="关联信息:" label-width="75px" >
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" >
+              <el-form-item  style="float: right;width: 100%;text-align: center">
+                <el-table
+                    :data="associatedData"
+                    border
+                    style="width: 100%">
+                  <el-table-column
+                      v-if="form.onparties"
+                      prop="optionname"
+                      label="客户对象"
+                      >
+                    <template slot-scope="scope">
+                      <span>{{scope.row}}</span>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                      v-if="form.onstage"
+                      prop="remarks"
+                      label="项目阶段"
+                     >
+                    <template slot-scope="scope">
+                      <div v-if="form.onparties">
+                        <div v-for="(item,index) in form.stage">
+                          <span>{{item}}</span>
+                        </div>
+                      </div>
+                      <div v-else>
+                        <span>{{scope.row}}</span>
+                      </div>
+
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                      v-if="form.onparties || form.onstage"
+                      prop="score"
+                      label="分值">
+                    <template slot-scope="scope">
+                      <div v-if="form.onparties">
+                        <div v-for="(item,index) in form.parties">
+                          <template slot-scope="scope">
+                            <el-input v-model="scope.row" placeholder=""></el-input>
+                          </template>
+                        </div>
+                      </div>
+                      <div v-else-if="form.onstage">
+                        <div v-for="(item,index) in form.stage">
+                          <template slot-scope="scope">
+                            <el-input v-model="scope.row" placeholder=""></el-input>
+                          </template>
+                        </div>
+                      </div>
+
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-form-item>
+            </el-col>
+          </el-form>
+        </el-row>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import AssociateCustomerObject from '@/HDrpManagement/projectTask/modules/AssociateCustomerObject'
+import AssociatedProjectPhases from '@/HDrpManagement/projectTask/modules/AssociatedProjectStage'
+export default {
+  name: "add",
+  components:{AssociateCustomerObject,AssociatedProjectPhases},
+  data(){
+    return {
+      drawer:false,
+      input:'',
+      associatedData:[],
+      form:{
+        "sa_projtaskmagid": 0,
+        "taskname": "",
+        "sequence": 0,
+        "important": '0',
+        "onparties": false,
+        "onstage": false,
+        "parties": [],
+        "stage": [],
+        "projtaskmag_options": [
+          {
+            "sa_projtaskmag_optionsid": 0,
+            "optionname": "",
+            "remarks": "",
+            "score": 0,
+            "projtaskmag_optionscore": [
+              {
+                "sa_projtaskmag_optionscoreid":0,
+                "partiestype": "",
+                "sa_projstagemagid": "",
+                "score": 0
+              }
+            ]
+          },
+        ]
+      },
+      rules:{
+        taskname: [
+          { required: true, message: '请输入工作任务', trigger: 'blur' }
+        ],
+      }
+    }
+  },
+  methods:{
+    onShow(){
+      this.drawer = true
+    },
+    selectObject(val){
+      this.form.parties = val
+      if (this.form.onparties && this.form.onstage){
+        this.associatedData = this.form.parties
+      }else if(this.form.onparties){
+        this.associatedData = this.form.parties
+      }else if(this.form.onstage){
+        this.associatedData = this.form.stage
+      }
+    },
+    selectStage(val){
+      this.form.stage = val
+      if (this.form.onparties && this.form.onstage){
+        this.associatedData = this.form.parties
+      }else if(this.form.onparties){
+        this.associatedData = this.form.parties
+      }else if(this.form.onstage){
+        this.associatedData = this.form.stage
+      }
+    },
+    onSubmit(){
+      if (this.form.onstage){
+        this.form.onstage = 1
+      }else {
+        this.form.onstage = 0
+      }
+      if (this.form.onparties){
+        this.form.onparties = 1
+      }else {
+        this.form.onparties = 0
+      }
+      console.log(this.form)
+      /*this.$refs.formData.validate(async(valid)=>{
+        if (!valid) return false
+        const res = await this.$api.requested({
+          "id": "20221128144204",
+          "content": this.form
+        })
+        this.tool.showMessage(res,()=>{
+          this.drawer = false
+          this.$refs.formData.resetFields()
+          this.form = {
+            "sa_projtaskmagid": 0,
+            "taskname": "",
+            "sequence": 0,
+            "important": '0',
+            "onparties": false,
+            "onstage": false,
+            "parties": [],
+            "stage": [],
+            "projtaskmag_options": [
+              {
+                "sa_projtaskmag_optionsid": 0,
+                "optionname": "",
+                "remarks": "",
+                "score": "",
+                "projtaskmag_optionscore": [
+                  {
+                    "sa_projtaskmag_optionscoreid":0,
+                    "partiestype": "",
+                    "sa_projstagemagid": '',
+                    "score": ''
+                  }
+                ]
+              },
+            ]
+          }
+          this.$emit("onSuccess")
+        })
+      })*/
+    },
+    addOptions(){
+      console.log(this.form.projtaskmag_options)
+      this.form.projtaskmag_options.push({
+        "sa_projtaskmag_optionsid": 0,
+        "optionname": "",
+        "remarks": "",
+        "score": 0,
+        "projtaskmag_optionscore": [
+          {
+            "sa_projtaskmag_optionscoreid":0,
+            "partiestype": "",
+            "sa_projstagemagid": '',
+            "score": ''
+          }
+        ]
+      })
+    },
+    onClose(){
+      this.$refs.formData.resetFields()
+      this.form = {
+        "sa_projtaskmagid": 0,
+        "taskname": "",
+        "sequence": 0,
+        "important": '0',
+        "onparties": false,
+        "onstage": false,
+        "parties": [],
+        "stage": [],
+        "projtaskmag_options": [
+          {
+            "sa_projtaskmag_optionsid": 0,
+            "optionname": "",
+            "remarks": "",
+            "score": "",
+            "projtaskmag_optionscore": [
+              {
+                "sa_projtaskmag_optionscoreid":0,
+                "partiestype": "",
+                "sa_projstagemagid": '',
+                "score": ''
+              }
+            ]
+          },
+        ]
+      }
+    }
+  },
+  mounted() {
+    if (this.form.onparties && this.form.onstage){
+      this.associatedData = this.form.parties
+    }else if(this.form.onparties){
+      this.associatedData = this.form.parties
+    }else if(this.form.onstage){
+      this.associatedData = this.form.stage
+    }
+  },
+  watch:{
+    "form.onparties":function (val){
+      if (!val){
+        this.form.parties = []
+        this.associatedData = this.form.stage
+      }else if (val && this.form.onstage){
+        console.log(this.form)
+        this.associatedData = this.form.parties
+        this.$refs.onparties.drawer = true
+      }else if (val){
+        this.$refs.onparties.drawer = true
+      }
+    },
+    "form.onstage":function (val){
+      if (!val){
+        this.form.stage = []
+        this.associatedData = this.form.parties
+      }else if (val && this.form.onparties){
+        this.associatedData = this.form.parties
+        this.$refs.onstage.drawer = true
+      }else if (val){
+        this.$refs.onstage.drawer = true
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 15 - 0
src/Form/projectTask/edit.vue

@@ -0,0 +1,15 @@
+<template>
+  <div>
+    <el-button size="mini" type="primary"  >编 辑</el-button>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "edit"
+}
+</script>
+
+<style scoped>
+
+</style>

+ 5 - 6
src/HDrpManagement/competitor/detail/index.vue

@@ -18,21 +18,21 @@
       </div>
       <div slot="customOperation">
         <!-- 此区域提供了自定义操作按钮 -->
-        <toVoid :id="$route.query.id" ></toVoid>
+        <toVoid :id="$route.query.id" class="inline-16"></toVoid>
       </div>
       <div slot="slot0" >
-        <detailed ref="detailed"></detailed>
+        <detailed :basic="mainData" v-if="flag"></detailed>
       </div>
-      <div slot="slot1" class="container normal-panel">
+      <div slot="slot1" class=" normal-panel">
         <compete_projects :data="mainData" v-if="flag"></compete_projects>
       </div>
 <!--      <div slot="slot2" class="container normal-panel">
         <product_Information :data="this.$route.query.id"></product_Information>
       </div>-->
-      <div slot="slot2" class="container normal-panel">
+      <div slot="slot2" class=" normal-panel">
         <contacts :data="mainData" v-if="flag"></contacts>
       </div>
-      <div slot="slot3" class="container normal-panel">
+      <div slot="slot3" class=" normal-panel">
         <address_manage :data="mainData" v-if="flag"></address_manage>
       </div>
     </basicDetails>
@@ -69,7 +69,6 @@ export default {
       this.mainData = res.data
       this.$refs['details'].param.content.isExport = false
       this.$refs['details'].param.content.sa_competitorid = [this.mainData.sa_competitorid]
-      this.$refs.detailed.detailedList(this.mainData)
       this.changeDataStructure()
       this.flag = true
     },

+ 1 - 1
src/HDrpManagement/competitor/detail/modules/addressManage/list.vue

@@ -7,7 +7,7 @@
           v-model="search"
           clearable
           @clear="clearData()"
-          size="mini"
+          size="small"
           @keyup.enter.native="queryClick()">
         <i slot="prefix" class="el-icon-search" @click="queryClick()"></i>
       </el-input>

+ 1 - 1
src/HDrpManagement/competitor/detail/modules/addressManage/modules/add.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-button size="mini" type="primary" @click="onshow">新增客户地址</el-button>
+    <el-button size="small" type="primary" @click="onshow">新增客户地址</el-button>
     <el-drawer
         title="创建客户地址"
         :visible.sync="dialogFormVisible"

+ 1 - 1
src/HDrpManagement/competitor/detail/modules/competeProjects/list.vue

@@ -7,7 +7,7 @@
           v-model="search"
           clearable
           @clear="clearData()"
-          size="mini"
+          size="small"
           @keyup.enter.native="queryClick()">
         <i slot="prefix" class="el-icon-search" @click="queryClick()"></i>
       </el-input>

+ 1 - 1
src/HDrpManagement/competitor/detail/modules/competeProjects/modules/add.vue

@@ -1,6 +1,6 @@
 <template>
   <div >
-    <el-button size="mini" type="primary"  @click="onshow" >新增竞争项目</el-button>
+    <el-button size="small" type="primary"  @click="onshow" >新增竞争项目</el-button>
     <el-drawer
         title="关联项目商机"
         :visible.sync="drawer"

+ 1 - 1
src/HDrpManagement/competitor/detail/modules/contacts/list.vue

@@ -7,7 +7,7 @@
           v-model="search"
           clearable
           @clear="clearData()"
-          size="mini"
+          size="small"
           @keyup.enter.native="queryClick()">
         <i slot="prefix" class="el-icon-search" @click="queryClick()"></i>
       </el-input>

+ 1 - 1
src/HDrpManagement/competitor/detail/modules/contacts/modules/add.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-button size="mini" type="primary" @click="onshow">新增联系人</el-button>
+    <el-button size="small" type="primary" @click="onshow">新增联系人</el-button>
     <el-drawer
         title="创建联系人"
         :visible.sync="dialogFormVisible"

+ 8 - 7
src/HDrpManagement/competitor/detail/modules/detailedData.vue

@@ -1,7 +1,8 @@
 <template>
-  <div class="container normal-panel">
-    <div  class="container normal-panel">
-      <el-descriptions title="基本信息">
+  <div >
+    <div  class="normal-margin">
+      <el-descriptions :column="2" labelClassName="my-label" contentClassName="my-content" border>
+        <div slot="title" class="my-label__title">基本信息</div>
         <el-descriptions-item label-class-name="my-label" label="编号">{{ basic.sa_competitorid?basic.sa_competitorid:"--" }}</el-descriptions-item>
         <el-descriptions-item label-class-name="my-label" label="品牌名称">{{ basic.brandname?basic.brandname:"--" }}</el-descriptions-item>
         <el-descriptions-item label-class-name="my-label" label="企业名称">{{ basic.enterprisename?basic.enterprisename:"--" }}</el-descriptions-item>
@@ -11,9 +12,9 @@
         <el-descriptions-item label-class-name="my-label" label="备注">{{ basic.remarks?basic.remarks:"--" }}</el-descriptions-item>
       </el-descriptions>
     </div>
-
-    <div class="container normal-panel" >
-      <el-descriptions title="系统信息">
+    <div>
+      <el-descriptions :column="2" labelClassName="my-label" contentClassName="my-content" border>
+        <div slot="title" class="my-label__title">系统信息</div>
         <el-descriptions-item label-class-name="my-label" label="创建人">{{ basic.createby?basic.createby:"--" }}</el-descriptions-item>
         <el-descriptions-item label-class-name="my-label" label="创建时间">{{ basic.createdate?basic.createdate:"--" }}</el-descriptions-item>
         <el-descriptions-item label-class-name="my-label" label="跟进人">{{ basic.followby?basic.followby:"--" }}</el-descriptions-item>
@@ -30,7 +31,7 @@
 <script>
 export default {
   name: "detailedData",
-  props:["data"],
+  props:["basic"],
   data(){
     return {
       basic:[],

+ 1 - 1
src/HDrpManagement/competitor/detail/modules/toVoid.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-button size="mini" style="margin-left: -70px" @click="onshow">作 废</el-button>
+    <el-button size="mini"  @click="onshow">作 废</el-button>
     <el-dialog
         :visible.sync="dialogToVoidVisible"
         width="25%"

+ 27 - 18
src/HDrpManagement/competitor/index.vue

@@ -5,7 +5,7 @@
         formPath="competitor"
         tableName="competitorTable"
         idName="sa_competitorid"
-        :apiId="{query:20221018164302,del:''}"
+        :apiId="{query:20221018164302,del:'20221018164202'}"
         :options="options"
         :autoQuery="false"
         :detailPath="{path:'/competitorDetail'}"
@@ -13,19 +13,23 @@
       <div slot="titleRight">
         <importExcel style="margin-left:10px" @onSuccess="onSuccess"></importExcel>
       </div>
-      <div slot="custom" class="inline-16">
-        <el-date-picker
-          v-model="date"
-          size="small"
-          type="daterange"
-          value-format="yyyy-MM-dd"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          :default-time="['00:00:00', '23:59:59']"
-          @change="datechange">
-        </el-date-picker>
-      </div>
+      <template #custom>
+        <div class="mt-10">
+          <label class="search__label">创建时间:</label>
+          <el-date-picker
+              v-model="date"
+              style="margin-right: 24px !important;"
+              size="small"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              :default-time="['00:00:00', '23:59:59']"
+              @change="datechange">
+          </el-date-picker>
+        </div>
+      </template>
       <template v-slot:tbList="scope">
         <div>
           {{scope.data.column.data[[scope.data.column.columnname]]}}
@@ -44,8 +48,7 @@ export default {
   data(){
     return {
       options:[],
-      date:''
-
+      date:[]
     }
   },
   components:{
@@ -53,9 +56,15 @@ export default {
   },
   methods:{
     datechange(){
+      console.log(this.date,"日期")
       this.$refs['list'].param.content.isExport = false
-      this.$refs['list'].param.content.where.startdate = this.date[0]
-      this.$refs['list'].param.content.where.enddate = this.date[1]
+      if (this.date === null){
+        this.$refs['list'].param.content.where.startdate = ''
+        this.$refs['list'].param.content.where.enddate = ''
+      }else{
+        this.$refs['list'].param.content.where.startdate = this.date[0]
+        this.$refs['list'].param.content.where.enddate = this.date[1]
+      }
       this.$refs['list'].listData()
     },
     onSuccess () {

+ 1 - 1
src/HDrpManagement/projectChange/modules/detail.vue

@@ -77,7 +77,7 @@
     <div slot="slot5" class=" normal-panel">
       <Rival v-if="mainData" :data="mainData" />
     </div>
-    <div slot="slot6" class="container normal-panel">
+    <div slot="slot6" class=" normal-panel">
       <clue v-if="mainData" :data="mainData" />
     </div>
 

+ 1 - 1
src/HDrpManagement/projectChange/modules/modules/andEnterprise/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div style="margin-top: -10px">
+    <div>
       <add class="inline-16" :data="rowData" @addSuccess="onSuccess"></add>
       <el-input
           placeholder="请输入搜索内容"

+ 1 - 1
src/HDrpManagement/projectChange/modules/modules/clue/index.vue

@@ -1,7 +1,7 @@
 
 <template>
   <div>
-    <div style="margin-top: -10px">
+    <div >
       <el-input
           placeholder="请输入搜索内容"
           suffix-icon="el-icon-search"

+ 2 - 2
src/HDrpManagement/projectChange/modules/modules/productSet/index.vue

@@ -1,7 +1,7 @@
 
 <template>
   <div>
-    <div style="margin-top: -10px;margin-bottom: 10px">
+    <div style="margin-bottom: 20px">
       <add class="inline-16" :data="rowData" @addSuccess="onSuccess"></add>
       <el-input
           size="small"
@@ -257,6 +257,6 @@ export default {
   transform: translate3d(0,-2px,0); */
 }
 .image {
-  width:80px;height:80px;margin:0px auto;
+  width:38px;height:38px;margin:0px auto;
 }
 </style>

+ 1 - 1
src/HDrpManagement/projectChange/modules/modules/quotation/index.vue

@@ -1,7 +1,7 @@
 
 <template>
   <div>
-    <div style="margin-top: -10px">
+    <div style="">
       <el-input
           placeholder="请输入搜索内容"
           suffix-icon="el-icon-search"

+ 90 - 0
src/HDrpManagement/projectTask/detail/index.vue

@@ -0,0 +1,90 @@
+<template>
+  <div>
+    <basicDetails
+        ref="details"
+        :titleText="mainData.taskname"
+        formPath="projectTask"
+        :editData="mainData"
+        :mainAreaData="mainAreaData"
+        turnPageId="20221128143904"
+        :delApiId="20221128144004"
+        idname="sa_projtaskmagid"
+        ownertable="sa_projtaskmag"
+        :tags="[]"
+        :tabs="['评估项','关联对象']"
+        @pageChange="pageChange"
+        @onEditSuccess="queryMainData($route.query.id)">
+      <div slot="tags">
+        <!-- 使用此插槽可不传[tags] -->
+        <!-- :tabs="['经销商团队','代理区域','营销类别','账户余额']" -->
+      </div>
+      <div slot="customOperation" >
+      </div>
+      <div slot="slot0" >
+      </div>
+      <div slot="slot1" >
+      </div>
+    </basicDetails>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "index",
+  data(){
+    return {
+      mainData:{},
+      mainAreaData:{}
+    }
+  },
+  methods:{
+    async queryMainData(id){
+      const res = await this.$api.requested({
+        "id": 20221128144104,
+        "content": {
+          "sa_projtaskmagid":this.$route.query.id
+        }
+      })
+      this.mainData = res.data
+      console.log(this.mainData,"工作内容")
+      this.changeDataStructure()
+    },
+    changeDataStructure() {
+      this.mainAreaData = [
+        {
+          label:'顺序',
+          value:this.mainData.sequence === 0?'0':this.mainData.sequence
+        },
+        {
+          label:'关键任务',
+          value:this.mainData.important === 1?'是':'否'
+        },
+        {
+          label:'是否关联客户对象',
+          value:this.mainData.onparties === 1?'是':'否'
+        },
+        {
+          label:'是否关联项目阶段',
+          value:this.mainData.onstage === 1?'是':'否'
+        }
+      ]
+    },
+    // 监听切换数据,上一页,下一页
+    pageChange (id,rowindex) {
+      console.log(rowindex)
+      this.$router.replace({path:'/projectTaskDetail',query:{id:id,rowindex:rowindex}})
+      this.queryMainData(id)
+    },
+  },
+  mounted() {
+    this.queryMainData(this.$route.query.id)
+  },
+  created() {
+
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 95 - 0
src/HDrpManagement/projectTask/index.vue

@@ -0,0 +1,95 @@
+<template>
+  <div>
+    <basicLayout
+        ref="basicLayout"
+        formPath="projectTask"
+        tableName="projectTaskTable"
+        idName="sa_projtaskmagid"
+        :apiId="{query:20221128143904,del:20221128144004}"
+        :options="options"
+        :detailPath="{
+        path:'/projectTaskDetail'
+      }"
+    >
+      <div slot="custom">
+      </div>
+      <template v-slot:tbList="scope">
+        <div v-if="scope.data.column.columnname === 'important'">
+          {{scope.data.column.columnname === 1?'是':'否'}}
+        </div>
+        <div v-else-if="scope.data.column.columnname === 'projtaskmag_options'" >
+          <div v-for="(item,index) in scope.data.column.data.projtaskmag_options" :key="index" >
+            <div v-if="index === 0 && scope.data.column.data.projtaskmag_options.length -1  === index" style="height: 40px;line-height: 40px;vertical-align: center;margin-top:-5px;margin-bottom: -5px">
+              {{item.optionname}}
+            </div>
+            <div v-else-if="index === 0" style="height: 40px;line-height: 40px;vertical-align: center;margin-top: -5px">
+              {{item.optionname}}
+              <p style="border-bottom: 1px solid #ebeef5;transform: scale(1.09,1)"></p>
+            </div>
+            <div v-else-if="scope.data.column.data.projtaskmag_options.length -1  !== index" style="height: 40px;line-height: 40px;vertical-align: center;">
+              {{item.optionname}}
+              <p style="border-bottom: 1px solid #ebeef5;transform: scale(1.09,1)"></p>
+            </div>
+            <div v-else style="height: 40px;line-height: 40px;vertical-align: center;margin-bottom: -5px">{{item.optionname}}</div>
+          </div>
+        </div>
+        <div v-else-if="scope.data.column.columnname === 'remarks'" >
+          <div v-for="(item,index) in scope.data.column.data.projtaskmag_options" :key="index" >
+            <div v-if="index === 0 && scope.data.column.data.projtaskmag_options.length -1  === index" style="height: 40px;line-height: 40px;vertical-align: center;margin-top:-5px;margin-bottom: -5px">
+              {{item.remarks}}
+            </div>
+            <div v-else-if="index === 0" style="height: 40px;line-height: 40px;vertical-align: center;margin-top: -5px">
+              {{item.remarks}}
+              <p style="border-bottom: 1px solid #ebeef5;transform: scale(1.09,1)"></p>
+            </div>
+            <div v-else-if="scope.data.column.data.projtaskmag_options.length -1  !== index" style="height: 40px;line-height: 40px;vertical-align: center;">
+              {{item.remarks}}
+              <p style="border-bottom: 1px solid #ebeef5;transform: scale(1.09,1)"></p>
+            </div>
+            <div v-else style="height: 40px;line-height: 40px;vertical-align: center;margin-bottom: -5px">{{item.remarks}}</div>
+          </div>
+        </div>
+        <div v-else-if="scope.data.column.columnname === 'score'" >
+          <div v-for="(item,index) in scope.data.column.data.projtaskmag_options" :key="index" >
+            <div v-if="index === 0 && scope.data.column.data.projtaskmag_options.length -1  === index" style="height: 40px;line-height: 40px;vertical-align: center;margin-top:-5px;margin-bottom: -5px">
+              {{item.score}}
+            </div>
+            <div v-else-if="index === 0" style="height: 40px;line-height: 40px;vertical-align: center;margin-top: -5px">
+              {{item.score}}
+              <p style="border-bottom: 1px solid #ebeef5;transform: scale(1.09,1)"></p>
+            </div>
+            <div v-else-if="scope.data.column.data.projtaskmag_options.length -1  !== index" style="height: 40px;line-height: 40px;vertical-align: center;">
+              {{item.score}}
+              <p style="border-bottom: 1px solid #ebeef5;transform: scale(1.09,1)"></p>
+            </div>
+            <div v-else style="height: 40px;line-height: 40px;vertical-align: center;margin-bottom: -5px">{{item.score}}</div>
+          </div>
+        </div>
+        <div v-else>
+          {{scope.data.column.data[[scope.data.column.columnname]]}}
+        </div>
+      </template>
+      <template v-slot:tbOpreation="scope">
+
+      </template>
+    </basicLayout>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "index",
+  data(){
+    return {
+      options:[]
+    }
+  },
+  methods:{
+
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 108 - 0
src/HDrpManagement/projectTask/modules/AssociateCustomerObject.vue

@@ -0,0 +1,108 @@
+<template>
+  <div>
+    <el-button type="text" size="small" style="font-size: 14px;!important;" :disabled="!data.onparties" @click="drawer = true">关联</el-button>
+    <el-drawer
+        title="关联客户对象"
+        :visible.sync="drawer"
+        size="35%"
+        direction="rtl"
+        append-to-body
+        :show-close="false"
+        @close="onClose">
+      <div class="drawer__panel" style="margin-bottom: 0px;padding-bottom: 0px">
+        <layoutTable ref="projectType" :layout="tablecols" :data="list"  :custom="true" :checkbox="true" @checkboxCallBack="checkboxCallBack">
+          <template v-slot:customcol="scope">
+            <p>{{scope.column.data[scope.column.columnname]}}</p>
+          </template>
+        </layoutTable>
+        <div  class="container normal-panel" style="text-align:right">
+          <el-pagination
+              background
+              small
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="currentPage"
+              :page-sizes="[20, 50, 100, 200]"
+              layout="total,sizes, prev, pager, next, jumper"
+              :total="total">
+          </el-pagination>
+        </div>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import layoutTable from '@/components/table/index2'
+export default {
+  name: "AssociateCustomerObject",
+  props:["data"],
+  components:{layoutTable},
+  data(){
+    return {
+      drawer:false,
+      tablecols:[],
+      list:[],
+      currentPage:0,
+      total:0,
+      selectObject:[],
+      param:{
+        "classname": "sysmanage.develop.optiontype.optiontype",
+        "method": "optiontypeselect",
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "typename": "customertypemx",
+          "parameter": {
+          }
+        }
+      }
+    }
+  },
+  methods:{
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+    },
+    onSubmit(){
+      this.drawer = false
+      this.$emit("selectObject",this.selectObject)
+    },
+    checkboxCallBack(val){
+      console.log(val)
+      val.forEach((item,index)=>{
+        this.selectObject[index] = item.value
+      })
+      console.log(this.selectObject)
+
+    },
+    onClose(){
+      this.drawer = false
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).AssociateCustomerObjectTable.tablecols
+    this.listData()
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 106 - 0
src/HDrpManagement/projectTask/modules/AssociatedProjectStage.vue

@@ -0,0 +1,106 @@
+<template>
+  <div>
+    <el-button type="text" size="small" style="font-size: 14px;!important;" :disabled="!data.onstage" @click="drawer = true">关联</el-button>
+    <el-drawer
+        title="关联项目阶段"
+        :visible.sync="drawer"
+        size="35%"
+        direction="rtl"
+        append-to-body
+        :show-close="false"
+        @close="onClose">
+      <div class="drawer__panel" style="margin-bottom: 0px;padding-bottom: 0px">
+        <layoutTable ref="projectType" :layout="tablecols" :data="list"  :custom="true" :checkbox="true" @checkboxCallBack="checkboxCallBack">
+          <template v-slot:customcol="scope">
+            <p>{{scope.column.data[scope.column.columnname]}}</p>
+          </template>
+        </layoutTable>
+        <div  class="container normal-panel" style="text-align:right">
+          <el-pagination
+              background
+              small
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+              :current-page="currentPage"
+              :page-sizes="[20, 50, 100, 200]"
+              layout="total,sizes, prev, pager, next, jumper"
+              :total="total">
+          </el-pagination>
+        </div>
+      </div>
+      <div class="fixed__btn__panel">
+        <el-button size="small" @click="drawer = false" class="normal-btn-width">取 消</el-button>
+        <el-button size="small" type="primary" @click="onSubmit" class="normal-btn-width">确 定</el-button>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import layoutTable from '@/components/table/index2'
+export default {
+  name: "AssociatedProjectStage",
+  props:["data"],
+  components:{layoutTable},
+  data(){
+    return {
+      drawer:false,
+      tablecols:[],
+      list:[],
+      currentPage:0,
+      total:0,
+      selectStage:[],
+      param:{
+        "id": 20221128143604,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "where": {
+            "condition": "",
+            "allprojecttype":"0",
+            "projecttype":""
+          }
+        }
+      }
+    }
+  },
+  methods:{
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      this.total = res.total
+      this.currentPage = res.pageNumber
+    },
+    checkboxCallBack(val){
+      val.forEach((item,index)=>{
+        this.selectStage[index] = item.stagename
+      })
+    },
+    onSubmit(){
+      this.drawer = false
+      this.$emit("selectStage",this.selectStage)
+    },
+    onClose(){
+      this.drawer = false
+    },
+    handleSizeChange(val) {
+      // console.log(`每页 ${val} 条`);
+      this.param.content.pageSize = val
+      this.listData()
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.param.content.pageNumber = val
+      this.listData()
+    },
+  },
+  created() {
+    this.tablecols = this.tool.tabelCol(this.$route.name).AssociatedProjectStageTable.tablecols
+    this.listData()
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 1 - 1
src/components/normal-basic-layout/details/index.vue

@@ -93,7 +93,7 @@ export default {
       const res = await this.$api.requested(this.param)
       this.total = res.total
       this.$emit('pageChange',res.data[0][this.idname],res.data[0].rowindex)
-      this.$refs['tag'].queryTag()
+      this.$refs['tag']?this.$refs['tag'].queryTag():''
       
     },
     next () {

+ 21 - 0
src/router/HDrpManagement.js

@@ -260,6 +260,27 @@ const HDrpManagement = [
       keeproute: true,
     },
     component: () => import(/* webpackChunkName: "about" */ '@/HDrpManagement/projectStageMag/index'),
+  },{
+    path: '/projectTask',
+    name: 'projectTask',
+    meta: {
+      title: '项目工作任务管理',
+      ast_nav: true,
+      keeproute: true,
+    },
+    component:() => import(/* webpackChunkName: "about" */ '@/HDrpManagement/projectTask/index'),
+    children: [
+      {
+        path: '/projectTaskDetail',
+        name: 'projectTask',
+        meta: {
+          title: '项目工作任务管理详情',
+          ast_nav: true,
+          keeproute: true,
+        },
+        component:() => import(/* webpackChunkName: "about" */ '@/HDrpManagement/projectTask/detail/index'),
+      }
+    ]
   },{
     path: '/competitor',
     name: 'competitor',