Browse Source

Merge remote-tracking branch 'origin/mergeBranch' into mergeBranch

qymljy 3 years ago
parent
commit
a5e0ebf1e2

+ 71 - 3
src/HDrpManagement/AccountMoney/index.vue

@@ -2,11 +2,43 @@
 <template>
   <div>
     <basicLayout 
-      ref="basicLayout" 
+      ref="list" 
       formPath="AccountMoney" 
       tableName="accountMoneyTable" 
       :apiId="{query:20221008145903}"
       :options="options">
+      <div slot="custom">
+        <el-select 
+          v-model="sys_enterpriseid" 
+          placeholder="企业筛选" 
+          size="mini" 
+          @change="enterpriseChange" 
+          clearable 
+          @clear="enterpriseChange($refs.list.param.content.where.sys_enterpriseid='')"
+        >
+          <el-option
+            v-for="item in enterpriseList"
+            :key="item.sys_enterpriseid"
+            :label="item.enterprisename"
+            :value="item.sys_enterpriseid">
+          </el-option>
+        </el-select>
+        <el-select 
+          v-model="accountType" 
+          placeholder="账户名称筛选" 
+          size="mini" 
+          @change="accountChange" 
+          clearable 
+          @clear="accountChange($refs.list.param.content.where.accountname='')"
+        >
+          <el-option
+            v-for="(item,index) in accountTypeList"
+            :key="index"
+            :label="item.value"
+            :value="item.value">
+          </el-option>
+        </el-select>
+      </div>
       <template v-slot:tbList="scope">
         <div v-if="scope.data.column.columnname == 'province'">
           {{`${scope.data.column.data[[scope.data.column.columnname]]}、${scope.data.column.data.city}、${scope.data.column.data.county}`}}
@@ -15,19 +47,55 @@
           {{scope.data.column.data[[scope.data.column.columnname]]}}
         </div>
       </template>
+      <template v-slot:tbOpreation="scope">
+        <Detail :rowData="scope.data.data"/>
+      </template>
     </basicLayout>
   </div>
 </template>
 
 <script>
-
+import Detail from './modules/detail'
 export default {
+  components:{Detail},
   data () {
     return {
-      options:[]
+      options:[],
+      enterpriseList:'',
+      accountType:'',
+      accountTypeList:'',
+      sys_enterpriseid:''
     }
   },
+  async created () {
+    this.getEnterprise()
+    let res = await this.$store.dispatch('optiontypeselect','accountname')
+    this.accountTypeList = res.data
+  },
   methods:{
+    /** 获取公司数据 */
+    async getEnterprise () {
+      let res = await this.$api.requested({
+        "id": 20221021095802,
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 99999,
+            "where": {
+                "condition": ""
+            }
+        },
+      })
+      this.enterpriseList = res.data
+    },
+    /* 企业筛选 */
+    enterpriseChange () {
+      this.$refs.list.param.content.where.sys_enterpriseid = this.sys_enterpriseid
+      this.$refs.list.listData()
+    },
+    accountChange () {
+      this.$refs.list.param.content.where.accountname = this.accountType
+      this.$refs.list.listData()
+    }
   }
 }
 

+ 67 - 0
src/HDrpManagement/AccountMoney/modules/detail.vue

@@ -0,0 +1,67 @@
+<template>
+  <div>
+    <el-button size="mini" type="text" @click="editBtn">详 情</el-button>
+    <el-dialog title="新 增" :visible.sync="dialogFormVisible" width="60%">
+      <div slot="title" style="font-size: 15px">
+        资金流水账
+      </div>
+      <basicLayout 
+        ref="basicLayout" 
+        formPath="" 
+        tableName="accountMoneyDetailTable" 
+        idName="sa_accountclassid" 
+        :apiId="{query:20221022161304,del:''}" 
+        :options="options"
+        @listCreate="list">
+        <div slot="custom"></div>
+        <template v-slot:tbList="scope">
+          <div v-if="scope.data.column.columnname === 'isorder'">
+            <span v-if="scope.data.column.data[scope.data.column.columnname] === 1">是</span>
+            <span v-else>否</span>
+          </div>
+          <div v-else>
+            {{scope.data.column.data[[scope.data.column.columnname]]}}
+          </div>
+        </template>
+        <template v-slot:tbOpreation="scope">
+        </template>
+      </basicLayout>
+      <div class="dialog-footer">
+        <el-button size="small" @click="dialogFormVisible = false" class="normal-btn-width">取 消</el-button>
+      </div>
+    </el-dialog>
+    
+  </div>
+</template>
+
+<script>
+import { log } from '@antv/g2plot/lib/utils'
+export default {
+  props:['rowData'],
+  components:{},
+  name: "index",
+  data() {
+    return {
+      options:[],
+      dialogFormVisible:false
+    }
+  },
+  methods: {
+    editBtn () {
+      this.dialogFormVisible = true
+    },
+    list (param) {
+      console.log(this.rowData);
+      
+      param.content.sa_accountclassid = this.rowData.sa_accountclassid
+      param.content.sys_enterpriseid = this.rowData.sys_enterpriseid
+      param.content.minAmount = 20
+      param.content.maxAmount = 0
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 1 - 6
src/HDrpManagement/projectChange/index.vue

@@ -43,16 +43,12 @@
           :data="putPeople" 
           :rowData="scope.data.data"
         />
-
         <Check 
           v-if="!scope.data.data.reportcheckby && scope.data.data.reportby == userInfo.name && tool.checkAuth($route.name,'check')" 
           @checkSuccess="$refs.basicLayout.listData()" 
           :rowData="scope.data.data"
         />
-        <Locked
-          @onSuccess="$refs.basicLayout.listData()"
-          :rowData="scope.data.data"
-        />
+        <Locked v-if="tool.checkAuth($route.name,'Locked')" :rowData="scope.data.data" @onSuccess="$refs.basicLayout.listData()"/>
         <Del 
           :id="scope.data.data.sa_projectid" 
           :nameId="20221020144302" 
@@ -71,7 +67,6 @@ import Del from './components/del'
 import putPeople from './components/putPeople'
 import Check from './components/check'
 import Locked from './components/Locked'
-
 import TimeSelect from '@/SManagement/submitedit_one/components/TimeSelect'
 export default {
   components:{Del,putPeople,Check,TimeSelect,Locked},

+ 42 - 51
src/HDrpManagement/projectChange/modules/detail.vue

@@ -18,7 +18,10 @@
       <!-- 此区域提供了自定义操作按钮 -->
     </div>
     <div slot="slot0" class="container normal-panel">
-      <BaseInfo :data="mainData" v-if="mainData"/>
+      <BaseInfo v-if="detailInfo" :detailInfo="detailInfo"/>
+    </div>
+    <div slot="slot1" class="container normal-panel">
+      <StageTask v-if="mainData" :rowData="mainData"/>
     </div>
     <div slot="slot2" class="container normal-panel">
       <ProjectSet />
@@ -36,9 +39,10 @@
 import Quotation from './modules/quotation/index'
 import ProjectSet from './modules/projectSet/index'
 import Rival from './modules/rival/index'
-import BaseInfo from './modules/baseInfo/index'
+import BaseInfo from './modules/baseInfo/baseInfo'
+import StageTask from './modules/stageTask/index'
 export default {
-  components:{Quotation,ProjectSet,Rival,BaseInfo},
+  components:{Quotation,ProjectSet,Rival,BaseInfo,StageTask},
   data () {
     return {
       mainData:'',
@@ -50,6 +54,7 @@ export default {
       projectLead:'',
       projectPanl:'',
       projectAddress:'',
+      detailInfo:'',
       tagObj:''
     }
   },
@@ -151,6 +156,38 @@ export default {
       console.log(res);
     },
     changeDataStructure () {
+      this.detailInfo = {
+        baseInfo: [
+          {label:'项目编号',value:this.mainData.projectnum ? this.mainData.projectnum : '--'},
+          {label:'项目名称',value:this.mainData.projectname ? this.mainData.projectname : '--'},
+          {label:'项目地址',value:this.projectAddress.find(item => item.contactsid == this.mainData.sa_project_addressid).address},
+          {label:'项目等级',value:this.projectLead.find(item => item.rowindex == this.mainData.grade).value},
+          {label:'项目类型',value:this.mainData.projecttype ? this.mainData.projecttype : '--'},
+          {label:'当前项目阶段',value:this.mainData.stagename ? this.mainData.stagename : '--'},
+          {label:'项目报备时间',value:''},
+          {label:'项目联系人',value:this.mainData.contact ? this.mainData.contact : '--'},
+          {label:'联系人手机号',value:this.mainData.phonenumber ? this.mainData.phonenumber : '--'},
+          {label:'项目规模',value:this.mainData.scale ? this.mainData.scale : '--'},
+          {label:'项目状态',value:this.mainData.status ? this.mainData.status : '--'},
+          {label:'项目折扣',value:this.mainData.discountrate ? this.mainData.discountrate : '--'},
+          {label:'项目预算',value:this.mainData.budgetary ? this.mainData.budgetary : '--'},
+          {label:'预计签约金额',value:this.mainData.signamount_due ? this.mainData.signamount_due : '--'},
+          {label:'预计签约月份',value:this.mainData.signdate_due ? this.mainData.signdate_due : '--'},
+          {label:'赢率',value:this.mainData.winrate ? this.mainData.winrate : '--'},
+          {label:'负责人',value:this.mainData.name ? this.mainData.name : '--'},
+        ],
+        systemInfo: [
+          {label:'创建人',value:this.mainData.createby ? this.mainData.createby : '--'},
+          {label:'创建时间',value:this.mainData.createdate ? this.mainData.createdate : '--'},
+          {label:'最近跟进人',value:this.mainData.followby ? this.mainData.followby : '--'},
+          {label:'最近跟进时间',value:this.mainData.followdate ? this.mainData.followdate : '--'},
+          {label:'锁定状态',value:this.mainData.locked == '0' ? '锁定' : '解锁'},
+          {label:'最近编辑人',value:this.mainData.changeby ? this.mainData.changeby : '--'},
+          {label:'最近编辑时间',value:this.mainData.changedate ? this.mainData.changedate : '--'},
+          {label:'转手次数',value:this.mainData.changecount !== '' ? this.mainData.changecount : '--'},
+          
+        ]
+      }
       this.mainAreaData = [
         {
           label:'项目名称',
@@ -176,63 +213,17 @@ export default {
           label:'项目阶段',
           value: this.mainData.stagename
         },
-        {
-          label:'项目赢率',
-          value: this.mainData.winrate
-        },
-        {
-          label:'项目预算',
-          value: this.mainData.budgetary
-        },
         {
           label:'项目状态',
           value: this.mainData.status
         },
         {
-          label:'项目地址',
-          // value: this.mainData.sa_project_addressid
-          value: this.projectAddress.find(item => item.contactsid == this.mainData.sa_project_addressid).address
-        },
-        {
-          label:'项目详细地址',
-          value: this.mainData.address
+          label:'项目状态',
+          value: this.mainData.enterprisename
         },
         {
           label:'负责人',
           value: this.mainData.name
-        },{
-          label:'预计签约金额',
-          value: this.mainData.signamount_due
-        },
-        {
-          label:'预计签约时间',
-          value: this.mainData.signdate_due
-        },
-        {
-          label:'创建时间',
-          value: this.mainData.createdate
-        },
-        {
-          label:'创建人',
-          value: this.mainData.createby
-        },{
-          label:'编辑时间',
-          value: this.mainData.changedate
-        },{
-          label:'跟进时间',
-          value: this.mainData.followdate
-        },{
-          label:'跟进人',
-          value: this.mainData.followby
-        },{
-          label:'创建人',
-          value: this.mainData.createby
-        },{
-          label:'创建人',
-          value: this.mainData.createby
-        },{
-          label:'创建人',
-          value: this.mainData.createby
         },
       ]
     }

+ 36 - 0
src/HDrpManagement/projectChange/modules/modules/baseInfo/baseInfo.vue

@@ -0,0 +1,36 @@
+<template>
+  <div>
+    <div class="container" style="margin-top: 2%">
+      <el-descriptions title="基本信息">
+        <el-descriptions-item v-for="(item,index) in detailInfo.baseInfo" :key="index" :label="item.label">{{ item.value }}</el-descriptions-item>
+      </el-descriptions>
+    </div>
+
+    <div class="container normal-panel" style="margin-top: 2%">
+      <el-descriptions title="系统信息">
+        <el-descriptions-item v-for="(item,index) in detailInfo.systemInfo" :key="index" :label="item.label">{{ item.value }}</el-descriptions-item>
+      </el-descriptions>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "detailedData",
+  props:["detailInfo"],
+  detailInfo(){
+    return {
+    }
+  },
+  mounted() {
+
+  },
+  methods:{
+
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

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

@@ -17,14 +17,14 @@
         </div>
       </template>
       <template v-slot:tbOpreation="scope">
-        <delete-btn 
+        <!-- <delete-btn 
           ref="del" 
           :id="scope.data.data.itemid" 
           @deleteCreate="$refs.del.param.content.deletereason='无'" 
           @deleteSuccess="$refs.basicLayout.listData()" 
           nameId="20221021145602" 
           nameKey="sa_project_itemsids" 
-        ></delete-btn>
+        ></delete-btn> -->
       </template>
     </basicLayout>
   </div>

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

@@ -14,14 +14,14 @@
         </div>
       </template>
       <template v-slot:tbOpreation="scope">
-        <delete-btn 
+        <!-- <delete-btn 
           ref="del" 
           :id="scope.data.data.sa_competitorid" 
           @deleteCreate="$refs.del.param.content.deletereason='无'" 
           @deleteSuccess="$refs.basicLayout.listData()" 
           nameId="20221018164202" 
           nameKey="sa_competitorids" 
-        ></delete-btn>
+        ></delete-btn> -->
         <el-button size="mini" type="text" class="inline-16" @click="$router.push({path:'/rivalDetail',query:{id:scope.data.data.sa_competitorid,rowindex:scope.data.data.rowindex}})">详 情</el-button>
       </template>
     </basicLayout>

+ 70 - 0
src/HDrpManagement/projectChange/modules/modules/stageTask/components/Editor.vue

@@ -0,0 +1,70 @@
+<template>
+  <div class="bottom">
+    <div class="file-box">
+      <file-item :isDownLoad="false" :isDelete="true" :itemStyle="itemDrawerStyle" :fileData="fileType.fileList(data.attinfos)"
+        @deleteSuccess="deleteSuccess"></file-item>
+    </div>
+    <upload :folderid="folderid"
+      :bindData="{ ownertable: idname.slice(0, idname.length - 2), ownerid: data[idname], usetype: '' }"
+      @onSuccess="queryAttments"></upload>
+  </div>
+</template>
+
+<script>
+import FileItem from '@/components/file-block/index'
+import upload from '@/components/upload/hw_obs_upload.vue'
+import { log } from '@antv/g2plot/lib/utils';
+export default {
+  props:['data'],
+  name: '',
+  data() {
+    return {
+      idname:'sa_project_stageworkid',
+      folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
+      itemDrawerStyle: {
+        img: {
+          width: 53,
+          height: 64
+        },
+        title: 16,
+        descript: 12
+      },
+    };
+  },
+  components: {
+    FileItem,
+    upload
+  },
+  computed:{
+  },
+  watch:{
+  },
+  methods: {
+    deleteSuccess () {
+
+    },
+    async queryAttments (data) {
+      console.log(data);
+      
+      let param = {
+        "classname": "system.attachment.Attachment",
+        "method": "createFileLink",
+        "content": {
+          "ownertable": "sa_project_stagework",
+          "ownerid": this.data.sa_project_stageworkid,
+          "usetype": "default",
+          "attachmentids" : data.data.attachmentids
+        }
+      }
+      let res = await this.$api.requested(param)   
+      this.$emit('onSuccess',res.data.data[0])   
+    }
+  },
+};
+</script>
+
+<style scoped>
+  .bottom {
+    margin-top: 15px;
+  }
+</style>

+ 223 - 0
src/HDrpManagement/projectChange/modules/modules/stageTask/components/edit.vue

@@ -0,0 +1,223 @@
+<template>
+  <div>
+    <div class="bottom">
+      <div class="file-box">
+        <file-item :isDownLoad="false" :isDelete="true" :itemStyle="itemDrawerStyle" :fileData="upload_panl.attinfos"
+          @deleteSuccess="deleteSuccess"></file-item>
+      </div>
+      <upload slot="upload" :folderid="folderid"
+        :bindData="{ ownertable: idname.slice(0, idname.length - 2), ownerid: data[idname], usetype: '' }"
+        @onSuccess="queryAttments"></upload>
+    </div>
+  </div>
+
+</template>
+
+<script>
+import FileItem from '@/components/file-block/index'
+import upload from '@/components/upload/hw_obs_upload.vue'
+export default {
+  props:['data'],
+  name: 'SubmiteditItemInfo',
+  data() {
+    return {
+      isFileInfoPanlShow: false,
+      itemDrawerStyle: {
+        img: {
+          width: 53,
+          height: 64
+        },
+        title: 16,
+        descript: 12
+      },
+    };
+  },
+  components: {
+    FileItem,
+    upload
+  },
+  computed: {
+  },
+  watch: {
+   
+  },
+  methods: {
+    actionSubmit() {
+      
+    },
+   
+    async save() {
+      //新增
+      if (this.param.content.content == '' && this.detailData.istextrequired == 1) {
+        return this.$notify({
+          title: '提示',
+          message: '请编辑内容',
+          type: 'warning'
+        })
+      }
+      if (this.upload_panl.attinfos.length == 0 && this.detailData.isattrequired == 1) {
+        return this.$notify({
+          title: '提示',
+          message: '请上传附件',
+          type: 'warning'
+        })
+      }
+      this.param.content.sat_submiteditmodelid =  this.upload_panl.sat_submiteditmodelid
+      this.param.content.sat_submiteditid = this.editData ? this.editData.sat_submiteditid : this.upload_panl.sat_submiteditid
+
+      if (this.editData) {
+        let res = await this.$api.requested(this.param).then(res => {
+          this.tool.showMessage(res, async () => {
+            this.upload_panl = ''
+            this.param.content.content = ''
+            this.param = {
+              "classname": "saletool.submitedit.submitedit",
+              "method": "insertorupdate",
+              "content": {
+                "sat_submiteditmodelid": "",
+                "content": "",
+                "sat_submiteditid": "0"
+              }
+            }
+            this.$api.requested({
+              "classname": "saletool.submitedit.submitedit",
+              "method": "sub_submitdetailed",
+              "content": {
+                "onceonly": this.$route.query.type == 'more' ? 1 : 0,
+                "sat_submiteditmodelid": res.data.sat_submiteditmodelid,
+                "sat_submiteditid": res.data.sat_submiteditid
+              }
+            }).then(res => {
+              if (res.code == 1) {
+                this.$parent.getDetailData()
+                this.isFileInfoPanlShow = false
+                if (this.$route.query.type != 'more') {
+                  this.disabled = true
+                  window.sessionStorage.setItem('history', 1)
+                }
+              }
+            })
+          })
+        })
+      } else {
+        let res = await this.$api.requested(this.param)
+        this.upload_panl.status = '发布'
+        this.tool.showMessage(res, async () => {
+          //提交提报明细
+          let param2 = {
+            "classname": "saletool.submitedit.submitedit",
+            "method": "sub_submitdetailed",
+            "content": {
+              "onceonly": this.$route.query.type == 'more' ? 1 : 0,
+              "sat_submiteditmodelid": this.detailData.sat_submiteditmodelid,
+              "sat_submiteditid": this.upload_panl.sat_submiteditid
+            }
+          }
+          let res = await this.$api.requested(param2)
+          if (res.code != 1) return console.log('错误');
+          this.upload_panl.status = '发布'
+          this.upload_panl.attinfos = null
+          this.param = {
+            "classname": "saletool.submitedit.submitedit",
+            "method": "insertorupdate",
+            "content": {
+              "sat_submiteditmodelid": "",
+              "content": "",
+              "sat_submiteditid": "0"
+            }
+          }
+          if (this.$route.query.type != 'more') {
+            this.disabled = true
+            window.sessionStorage.setItem('history', 1)
+          }
+          this.isFileInfoPanlShow = false
+          this.$parent.getDetailData()
+        })
+      }
+    },
+    async onSuccess(id) {
+      this.fileId = id
+      let param = {
+        "classname": "system.attachment.Attachment",
+        "method": "createFileLink",
+        "content": {
+          "ownertable": "sat_submitedit",
+          "ownerid": this.editData ? this.editData.sat_submiteditid : this.upload_panl.sat_submiteditid,
+          "usetype": "default",
+          "attachmentids": [
+            id
+          ]
+        }
+      }
+      let res = await this.$api.requested(param)
+      this.tool.showMessage(res, () => {
+        this.upload_panl.attinfos = this.fileType.fileList(this.upload_panl.attinfos.concat(res.data[0]))
+      })
+    },
+    deleteSuccess(data) {
+      this.editData ? this.editData.attinfos.splice(data, 1) : this.upload_panl.attinfos.splice(data, 1)
+    }
+  },
+};
+</script>
+
+<style scoped>
+* {
+  box-sizing: border-box;
+}
+
+/deep/ .el-drawer__header {
+  margin-bottom: 0;
+}
+
+/deep/ .el-drawer {
+  width: 546px !important;
+}
+
+.el-drawer__body .btn1 {
+  margin: 20px 0 20px 20px;
+  width: 88px;
+  height: 36px;
+  background: #fa8c16;
+}
+
+.el-drawer__body .content {
+  border-bottom: 10px solid #fafafa;
+  padding: 0 0 20px 20px;
+}
+
+.el-drawer__body .content p:first-child {
+  font-size: 16px;
+  font-weight: bold;
+  color: #333333;
+  margin-bottom: 20px;
+}
+
+.el-drawer .file-box p {
+  margin: 20px 0 20px 0;
+  font-size: 16px;
+  font-weight: bold;
+  color: #333333;
+  margin-bottom: 20px;
+}
+
+.el-drawer .file-box .file {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.upload {
+  display: flex;
+  margin-top: 20px;
+}
+
+/deep/.upload .el-button {
+  width: 100%;
+  border: 1px solid #3874f6;
+  color: #3874f6;
+}
+
+.bottom {
+  padding: 0 20px;
+}
+</style>

+ 290 - 0
src/HDrpManagement/projectChange/modules/modules/stageTask/index.vue

@@ -0,0 +1,290 @@
+<template>
+  <div>
+    <el-steps v-if="stageList" :active="calcIndex + 1" align-center>
+      <el-step v-for="(item,index) in stageList" :key="item.sa_projstagetemp_stageid">
+        <div slot="description" class="item" @click="stageClick(index,item)">
+          <div :class="[
+          'content',
+          {'enterStatus':item.active == 1},
+          {'active':clickCurrent == index}
+          ]">
+            <span class="title">{{item.stagename}}</span>
+            <span>{{calcTaskNumber(item)}}/{{item.work.length}}</span>
+          </div>
+        </div>
+      </el-step>  
+    </el-steps>
+    <el-card class="box-card">
+      <div slot="header" class="clearfix">
+        <span>阶段任务</span>
+        <el-button 
+          style="border:1px solid #3874F6;color:#3874F6" 
+          :disabled="currentData.active != 0" 
+          size="mini"
+          @click="enterStage"
+        >进入当前阶段</el-button>
+      </div>
+      <div class="task" v-for="(item,index) in currentData.work" :key="index">
+        <div class="task-header">
+          <span class="task-header-title">任务{{index+1}}</span>
+          <span class="task-header-status">未开始</span>
+        </div>
+        <div class="content">
+          <p>任务名称:{{item.workname}}</p>
+          <p>任务分值:{{item.score}}</p>
+          <p>任务描述:{{item.remarks}}</p>
+        </div>
+        <div class="task-footer">
+          <div class="btn">
+            <el-button size="mini" :disabled="!currentData.active || item.finished != 0" @click="editBtn(item)">编辑</el-button>
+            <el-button size="mini" type="primary" v-if="item.finished == 0" :disabled="!currentData.active" @click="taskSuccess(item)">完成</el-button>
+            <el-button size="mini" type="info" v-else disabled>已完成</el-button>
+          </div>
+        </div>
+      </div>
+    </el-card>
+
+
+    <el-drawer
+      title="我是标题"
+      :visible.sync="dialogFormVisible"
+      direction="rtl"
+      :modal="true"
+      :show-close="false"
+      :withHeader="false"
+      size="30%">
+      <div class="flex-align-center flex-between container" style="border-bottom:1px solid #f1f2f3">
+        <div style="font-size:20px">编辑任务信息</div>
+        <div>
+          <el-button type="primary" @click="saveEditInfo(dialogFormVisible = false)" size="small">提 交</el-button>
+        </div>
+      </div>
+      <div class="container">
+        <el-descriptions title="任务信息">
+          <el-descriptions-item label="任务名称">{{ editData.workname }}</el-descriptions-item>
+          <el-descriptions-item label="任务分值">{{ editData.score }}</el-descriptions-item>
+          <el-descriptions-item label="任务描述">{{ editData.remarks }}</el-descriptions-item>
+        </el-descriptions>
+        <el-descriptions title="完成描述" />
+        <el-input type="textarea" v-model="param.content.notes" placeholder="请填写完成的具体情况"></el-input>
+        <Editor :data="editData" @onSuccess="upLoad"/>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import Editor from './components/Editor'
+export default {
+  components:{Editor},
+  props:['rowData'],
+  name: '',
+  data() {
+    return {
+      stageList:'',
+      clickCurrent: 0,
+      currentData:'',
+      dialogFormVisible:false,
+      editData:'',
+      param: {
+        "id": 20221024160202,
+        "content": {
+            "sa_project_stageworkid": "",
+            "notes":""
+        }
+      }
+    };
+  },
+  computed:{
+    /* 计算当前进入阶段的index */
+    calcIndex () {
+      return this.stageList.indexOf(this.stageList.find(item => item.active == 1))
+    },
+    /* 计算当前阶段完成的任务个数 */
+    calcTaskNumber () {
+      return function (data) {
+        let num = 0
+        data.work.filter(item => {
+          if(item.finished != 0) {
+            num ++
+          }
+        })
+        return num
+      }
+      
+    }
+  },
+  watch:{
+  },
+  created () {
+    this.getStageList(true)
+  },
+  methods: {
+    upLoad () {
+      
+    },
+    editBtn (data) {
+      this.dialogFormVisible = true
+      this.editData = data
+    },
+    /* 保存编辑编辑信息 */
+    async saveEditInfo () {
+      this.param.content.sa_project_stageworkid = this.editData.sa_project_stageworkid
+      let res = await this.$api.requested(this.param)
+      this.tool.showMessage(res, () => {
+        this.dialogFormVisible = false
+        this.getStageList()
+      })
+    },
+    /* 获取阶段数据 */
+    async getStageList (no) {
+      let res = await this.$api.requested({
+        "id": 20221024102402,
+        "content": {
+            "sa_projectid": this.rowData.sa_projectid,
+            "sa_projstagetempid": this.rowData.sa_projstagetempid
+        }
+      })
+      this.stageList = res.data
+      /* 如果已有阶段 默认id释放 */
+      if(this.calcIndex) this.clickCurrent = null
+      if (no) {
+        this.currentData = this.stageList[0]
+      }
+      console.log(this.stageList);
+      
+    },
+    /* 单击阶段 */
+    stageClick (val,item) {
+      this.clickCurrent = val == this.calcIndex ? null : val
+      console.log(this.clickCurrent);
+      
+      this.currentData = item
+    },
+    /* 进入阶段 */
+    async enterStage () {
+      this.$alert('确定进入当前阶段吗?', '提示', {
+        confirmButtonText: '确定',
+        callback: async action => {
+          if (action == 'confirm') {
+            let res = await this.$api.requested({
+              "id": 20221024160102,
+              "content": {
+                  "sa_projectid": this.currentData.sa_projectid,
+                  "sa_projstagetempid": this.currentData.sa_projstagetempid,
+                  "sa_project_stageid": this.currentData.sa_project_stageid
+              }
+            })
+            console.log(res);
+            this.tool.showMessage(res,() => {
+              this.getStageList(false)
+            })
+          }
+        }
+      });
+    },
+    /* 任务完成 */
+    async taskSuccess (data) {
+      this.$alert('确定完成当前任务吗?无法撤销', '提示', {
+        confirmButtonText: '确定',
+        callback: async action => {
+          if (action == 'confirm') {
+            let res = await this.$api.requested({
+              "id": 20221024160302,
+              "content": {
+                  "sa_project_stageworkid": data.sa_project_stageworkid
+              }
+            })
+            console.log(res);
+            this.tool.showMessage(res,() => {
+              this.getStageList(false)
+            })
+          }
+        }
+      })
+    } 
+  },
+};
+</script>
+
+<style scoped>
+  .item {
+    cursor: pointer;
+  }
+  .item .content {
+    display: flex;
+    justify-content: space-evenly;
+    align-items: center;
+    transform: skew(-20deg);
+    padding: 5px 10px;
+    background: #EEEEEE;
+  }
+  .item .content span:first-child {
+    color: #000000;
+    transform: skew(20deg);
+  }
+  .item .content span:last-child {
+    display: inline;
+    background: #ffffff;
+    padding: 1px 10px;
+    border-radius: 30%;
+    color: #000000;
+    transform: skew(20deg);
+
+  }
+  .enterStatus {
+    background: #3874F6 !important;
+    color: #ffffff !important;
+  }
+  .active {
+    background: #F2F5FF !important;
+    color: #3874F6 !important;
+  }
+  .box-card {
+    margin-top: 20px;
+    font-size: 12px;
+  }
+  .box-card .clearfix {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+  .box-card .clearfix .enter-stage {
+    padding: 4px 10px;
+    color: #3874F6;
+    border-radius: 5px;
+    border: 1px solid #3874F6;
+    cursor: pointer;
+  }
+  .box-card .clearfix .enter-stage:hover {
+    background: #3874F6;
+    color: #ffffff;
+  }
+  /deep/.el-card__body {
+    padding: 0px 0px;
+  }
+  .box-card .task { 
+    border-bottom: 15px solid #F5F5F5;
+  }
+  .box-card .task:last-child {
+    border-bottom: none;
+  }
+  .box-card .task .task-header {
+    display: flex;
+    justify-content: space-between;
+    border-bottom: 1px solid #cccccc;
+    padding: 0 20px;
+    line-height: 35px;
+    margin-bottom: 15px;
+  }
+  .box-card .task .content {
+    padding: 0 20px;
+  }
+  .box-card .task .task-footer {
+    display: flex;
+    flex-direction: row-reverse;
+  }
+  .box-card .task .task-footer .btn {
+    margin:0 10px 10px 0;
+  }
+</style>