yusheng 1 год назад
Родитель
Сommit
6d46cd5585
2 измененных файлов с 478 добавлено и 317 удалено
  1. 12 0
      src/api/eos/index.js
  2. 466 317
      src/views/project-manage/project-initiation/components/project-form.vue

+ 12 - 0
src/api/eos/index.js

@@ -0,0 +1,12 @@
+import request from '@/utils/request';
+
+/**
+ * 获取客户信息详情
+ */
+export async function contactDetail(id) {
+  const res = await request.get(`/eom/contact/getById/${id}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 466 - 317
src/views/project-manage/project-initiation/components/project-form.vue

@@ -1,43 +1,47 @@
 <template>
   <div>
-<!--    <el-descriptions  :column="4" size="medium" border>-->
-<!--      <el-descriptions-item label="项目名称" span="2">{{ form.name }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="项目类型">{{ form.type }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="项目编码">{{ form.code }}</el-descriptions-item>-->
+    <!--    <el-descriptions  :column="4" size="medium" border>-->
+    <!--      <el-descriptions-item label="项目名称" span="2">{{ form.name }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="项目类型">{{ form.type }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="项目编码">{{ form.code }}</el-descriptions-item>-->
 
-<!--      <el-descriptions-item label="从属项目">{{ form.parentId }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="负责部门">{{ form.responsibleDeptName }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="项目经理">{{ form.responsibleUserName }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="项目团队">{{ form.teamName }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="项目预算">{{ form.number }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="项目周期">{{ form.cycle }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="计划开始日期">{{ form.cycle }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="计划完成日期">{{ form.planEndDate }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="关联合同">{{ form.contractName }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="客户名称">{{ form.contactName }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="客户联系电话">{{ form.contactRelationPhone }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="项目简介" :span="3">{{ form.content }}</el-descriptions-item>-->
-<!--      <el-descriptions-item label="附件">-->
-<!--        <el-link-->
-<!--          v-for="item in form.files"-->
-<!--          type="primary"-->
-<!--          :underline="false"-->
-<!--          @click="downloadFile(item)">-->
-<!--          {{ item.name }}-->
-<!--        </el-link>-->
-<!--      </el-descriptions-item>-->
-<!--    </el-descriptions>-->
-    <el-form ref="form" :model="form" :rules="rules" class="el-form-box" label-width="120px">
+    <!--      <el-descriptions-item label="从属项目">{{ form.parentId }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="负责部门">{{ form.responsibleDeptName }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="项目经理">{{ form.responsibleUserName }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="项目团队">{{ form.teamName }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="项目预算">{{ form.number }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="项目周期">{{ form.cycle }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="计划开始日期">{{ form.cycle }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="计划完成日期">{{ form.planEndDate }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="关联合同">{{ form.contractName }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="客户名称">{{ form.contactName }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="客户联系电话">{{ form.contactRelationPhone }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="项目简介" :span="3">{{ form.content }}</el-descriptions-item>-->
+    <!--      <el-descriptions-item label="附件">-->
+    <!--        <el-link-->
+    <!--          v-for="item in form.files"-->
+    <!--          type="primary"-->
+    <!--          :underline="false"-->
+    <!--          @click="downloadFile(item)">-->
+    <!--          {{ item.name }}-->
+    <!--        </el-link>-->
+    <!--      </el-descriptions-item>-->
+    <!--    </el-descriptions>-->
+    <el-form
+      ref="form"
+      :model="form"
+      :rules="rules"
+      class="el-form-box"
+      label-width="120px"
+    >
       <el-row>
         <el-col :span="8">
-          <el-form-item
-            prop="type"
-            label="项目类型">
-<!--            <dict-selection dict-name="项目类型" v-model="form.type" :disabled="dialogType=='view'"-->
-<!--                            @change="changeType"></dict-selection>-->
+          <el-form-item prop="type" label="项目类型">
+            <!--            <dict-selection dict-name="项目类型" v-model="form.type" :disabled="dialogType=='view'"-->
+            <!--                            @change="changeType"></dict-selection>-->
             <ele-tree-select
               filterable
-              :disabled="dialogType=='view'"
+              :disabled="dialogType == 'view'"
               clearable
               :data="typeTreeList"
               v-model="form.type"
@@ -50,18 +54,20 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item
-            prop="code"
-            label="项目编码">
-            <el-input :disabled="dialogType=='view'" v-model="form.code"></el-input>
+          <el-form-item prop="code" label="项目编码">
+            <el-input
+              :disabled="dialogType == 'view'"
+              v-model="form.code"
+            ></el-input>
           </el-form-item>
         </el-col>
 
         <el-col :span="8">
-          <el-form-item
-            prop="name"
-            label="项目名称">
-            <el-input v-model="form.name" :disabled="dialogType=='view'"></el-input>
+          <el-form-item prop="name" label="项目名称">
+            <el-input
+              v-model="form.name"
+              :disabled="dialogType == 'view'"
+            ></el-input>
           </el-form-item>
         </el-col>
       </el-row>
@@ -69,7 +75,7 @@
         <el-col :span="8">
           <el-form-item label="从属项目">
             <ele-tree-select
-              :disabled="dialogType=='view'"
+              :disabled="dialogType == 'view'"
               clearable
               filterable
               :data="projectList"
@@ -83,12 +89,10 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item
-            label="负责部门"
-            prop="responsibleDeptId">
+          <el-form-item label="负责部门" prop="responsibleDeptId">
             <ele-tree-select
               filterable
-              :disabled="dialogType=='view'"
+              :disabled="dialogType == 'view'"
               clearable
               :data="deptTreeList"
               v-model="form.responsibleDeptId"
@@ -101,95 +105,123 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item
-            prop="responsibleUserId"
-            label="项目经理">
+          <el-form-item prop="responsibleUserId" label="项目经理">
             <personSelect
-              :disabled="dialogType=='view'"
+              :disabled="dialogType == 'view'"
               ref="directorRef"
               :init="false"
               v-model="form.responsibleUserId"
-              @selfChange="personChange"/>
+              @selfChange="personChange"
+            />
           </el-form-item>
         </el-col>
-
       </el-row>
       <el-row>
-
         <el-col :span="8">
-          <el-form-item
-            prop="teamId"
-            label="项目团队">
-            <el-select v-model="form.teamId" placeholder="请选择" style="width: 100%;" :disabled="dialogType=='view'"
-                       clearable @change="teamChange">
+          <el-form-item prop="teamId" label="项目团队">
+            <el-select
+              v-model="form.teamId"
+              placeholder="请选择"
+              style="width: 100%"
+              :disabled="dialogType == 'view'"
+              clearable
+              @change="teamChange"
+            >
               <el-option
                 v-for="item in teamList"
                 :key="item.id"
                 :label="item.name"
-                :value="item.id">
+                :value="item.id"
+              >
               </el-option>
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="8">
-
           <el-form-item label="项目预算" prop="budget">
             <el-row>
               <el-col :span="18">
-                <el-input type="number" :min="0" v-model="form.budget" :disabled="dialogType=='view'">
+                <el-input
+                  type="number"
+                  :min="0"
+                  v-model="form.budget"
+                  :disabled="dialogType == 'view'"
+                >
                 </el-input>
               </el-col>
               <el-col :span="6">
-                <dict-selection dict-name="预算单位" v-model="form.unit"
-                                :disabled="dialogType=='view'"></dict-selection>
+                <dict-selection
+                  dict-name="预算单位"
+                  v-model="form.unit"
+                  :disabled="dialogType == 'view'"
+                ></dict-selection>
               </el-col>
             </el-row>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="项目优先级">
-            <dict-selection dict-name="项目优先级别" v-model="form.level"
-                            :disabled="dialogType=='view'"></dict-selection>
+            <dict-selection
+              dict-name="项目优先级别"
+              v-model="form.level"
+              :disabled="dialogType == 'view'"
+            ></dict-selection>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
-
         <el-col :span="8">
-          <el-form-item
-            prop="planStartDate"
-            label="计划开始日期">
+          <el-form-item prop="planStartDate" label="计划开始日期">
             <el-date-picker
-              @change="(val)=>setCycleValue(val,'planEndDate')"
+              @change="(val) => setCycleValue(val, 'planEndDate')"
               style="width: 100%"
-              :disabled="dialogType=='view'"
+              :disabled="dialogType == 'view'"
               v-model="form.planStartDate"
-              :picker-options="{disabledDate:(time)=>{return form.planEndDate&&time.getTime()>new Date(form.planEndDate)}}"
+              value-format="yyyy-MM-dd"
+              format="yyyy-MM-dd"
+              :picker-options="{
+                disabledDate: (time) => {
+                  return (
+                    form.planEndDate &&
+                    time.getTime() > new Date(form.planEndDate)
+                  );
+                }
+              }"
               type="date"
-              placeholder="选择日期">
+              placeholder="选择日期"
+            >
             </el-date-picker>
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item
-            prop="planEndDate"
-            label="计划完成日期">
+          <el-form-item prop="planEndDate" label="计划完成日期">
             <el-date-picker
-              @change="(val)=>setCycleValue(val,'planStartDate')"
+              @change="(val) => setCycleValue(val, 'planStartDate')"
               style="width: 100%"
-              :disabled="dialogType=='view'"
-              :picker-options="{disabledDate:(time)=>{return form.planStartDate&&time.getTime()<new Date(form.planStartDate)}}"
+              :disabled="dialogType == 'view'"
+              value-format="yyyy-MM-dd"
+              format="yyyy-MM-dd"
+              :picker-options="{
+                disabledDate: (time) => {
+                  return (
+                    form.planStartDate &&
+                    time.getTime() < new Date(form.planStartDate)
+                  );
+                }
+              }"
               v-model="form.planEndDate"
               type="date"
-              placeholder="选择日期">
+              placeholder="选择日期"
+            >
             </el-date-picker>
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item
-            prop="cycle"
-            label="项目周期">
-            <el-input v-model="form.cycle" :disabled="dialogType=='view'"></el-input>
+          <el-form-item prop="cycle" label="项目周期">
+            <el-input
+              v-model="form.cycle"
+              :disabled="dialogType == 'view'"
+            ></el-input>
           </el-form-item>
         </el-col>
 
@@ -202,32 +234,45 @@
         <!--            </el-input>-->
         <!--          </el-form-item>-->
         <!--        </el-col>-->
-
       </el-row>
       <el-row>
         <el-col :span="8">
-          <el-form-item
-            label="关联合同"
-            prop="contractName">
+          <el-form-item label="关联合同" prop="contractName">
             <el-input
-              :disabled="dialogType=='view'"
+              :disabled="dialogType == 'view'"
               clearable
               v-model="form.contractName"
               @click.native="handleContractBtn"
             />
           </el-form-item>
-
         </el-col>
         <el-col :span="8">
           <el-form-item label="客户名称">
-            <el-input v-model="form.contactName" @click.native="handleGetCus" :disabled="dialogType=='view'||!!form.contractName"></el-input>
+            <el-input
+              v-model="form.contactName"
+              @click.native="handleGetCus"
+              :disabled="dialogType == 'view' || !!form.contractName"
+            ></el-input>
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item
-            prop="contactRelationPhone"
-            label="客户联系电话">
-            <el-input v-model="form.contactRelationPhone" :disabled="dialogType=='view' || !!form.contractName"></el-input>
+          <el-form-item label="联系人">
+            <el-input v-model="form.contactRelationUserName"></el-input>
+            <!-- <el-select
+              v-model="form.contactRelationUserId"
+              placeholder="请选择"
+              @change="onchangeLink"
+              style="width: 100%"
+              :disabled="dialogType == 'view'"
+            >
+              <el-option
+                v-for="item in linkNameOptions"
+                :key="item.id"
+                :label="item.linkName"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select> -->
           </el-form-item>
         </el-col>
 
@@ -238,35 +283,65 @@
         <!--            <el-input v-model="form.stage" :disabled="dialogType=='view'"></el-input>-->
         <!--          </el-form-item>-->
         <!--        </el-col>-->
-
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item prop="contactRelationPhone" label="客户联系电话">
+            <el-input
+              v-model="form.contactRelationPhone"
+              :disabled="dialogType == 'view'"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="16">
+          <el-form-item label="联系地址" prop="contactAddressId">
+            <el-cascader
+              clearable
+              v-model="form.contactAddressId"
+              :options="cityData"
+              ref="sendAddress"
+              :disabled="dialogType == 'view'"
+              style="width: 35%"
+            ></el-cascader>
+            <el-input
+              placeholder="请输入"
+              v-model="form.contactAddress"
+              :disabled="dialogType == 'view'"
+              style="width: 65%"
+            ></el-input>
+          </el-form-item>
+        </el-col>
       </el-row>
       <el-row>
         <el-col :span="16">
           <el-form-item label="项目简介">
-            <el-input type="textarea" :rows="2" v-model="form.content" :disabled="dialogType=='view'"></el-input>
+            <el-input
+              type="textarea"
+              :rows="2"
+              v-model="form.content"
+              :disabled="dialogType == 'view'"
+            ></el-input>
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item
-            label="附件">
-            <fileUpload v-model="form.files" :type="dialogType" ></fileUpload>
-<!--            <el-button type="primary"  @click="handleUpload"> 上传</el-button>-->
-<!--            <fileUpload-->
-<!--              v-if="dialogType!='view'"-->
-<!--              style="position: absolute"-->
-<!--              v-model="form.files"-->
-<!--              module="main"-->
-<!--              :showLib="false"-->
-<!--            />-->
-<!--            <el-link-->
-<!--              v-else-->
-<!--              v-for="item in form.files"-->
-<!--              type="primary"-->
-<!--              :underline="false"-->
-<!--              @click="downloadFile(item)">-->
-<!--              {{ item.name }}-->
-<!--            </el-link>-->
-
+          <el-form-item label="附件">
+            <fileUpload v-model="form.files" :type="dialogType"></fileUpload>
+            <!--            <el-button type="primary"  @click="handleUpload"> 上传</el-button>-->
+            <!--            <fileUpload-->
+            <!--              v-if="dialogType!='view'"-->
+            <!--              style="position: absolute"-->
+            <!--              v-model="form.files"-->
+            <!--              module="main"-->
+            <!--              :showLib="false"-->
+            <!--            />-->
+            <!--            <el-link-->
+            <!--              v-else-->
+            <!--              v-for="item in form.files"-->
+            <!--              type="primary"-->
+            <!--              :underline="false"-->
+            <!--              @click="downloadFile(item)">-->
+            <!--              {{ item.name }}-->
+            <!--            </el-link>-->
           </el-form-item>
         </el-col>
       </el-row>
@@ -278,223 +353,297 @@
       <!--        </el-col>-->
       <!--      </el-row>-->
     </el-form>
-    <custom-dialog v-if="customDialogFlag" ref="customRef" :customDialogFlag.sync="customDialogFlag"
-                   @getCusInfo="getCusInfo"></custom-dialog>
-    <contractListDialog ref="contractRef" v-if="contractDialogFlag" :contractDialogFlag.sync="contractDialogFlag"
-                        @changeParent="getContractInfo"></contractListDialog>
-
+    <custom-dialog
+      v-if="customDialogFlag"
+      ref="customRef"
+      :customDialogFlag.sync="customDialogFlag"
+      @getCusInfo="getCusInfo"
+    ></custom-dialog>
+    <contractListDialog
+      ref="contractRef"
+      v-if="contractDialogFlag"
+      :contractDialogFlag.sync="contractDialogFlag"
+      @changeParent="getContractInfo"
+    ></contractListDialog>
   </div>
 </template>
 
 <script>
-import {getProjectCode, projectsToTreeAPI} from "@/api/project-manage";
-import PersonSelect from "@/components/CommomSelect/person-select.vue";
-import customDialog from "../../components/custom-dialog.vue";
-import fileUpload from "@/BIZComponents/addDoc/index.vue";
-import {getFile} from "@/api/system/file";
-import contractListDialog from "@/views/project-manage/components/contractListDialog.vue";
-import {getProduceTreeByCode} from "@/api/custom";
-import moment from "moment";
-
-export default {
-  name: "project-form",
-  components: {fileUpload, PersonSelect, customDialog, contractListDialog},
-  props: {
-    dialogType: {
-      type: String,
-      default: '',
-    },
-    dialogForm: {
-      type: Object,
-      default: () => {
-        return {
-          ...this.form
+  import { getProjectCode, projectsToTreeAPI } from '@/api/project-manage';
+  import PersonSelect from '@/components/CommomSelect/person-select.vue';
+  import customDialog from '../../components/custom-dialog.vue';
+  import fileUpload from '@/BIZComponents/addDoc/index.vue';
+  import { getFile } from '@/api/system/file';
+  import contractListDialog from '@/views/project-manage/components/contractListDialog.vue';
+  import { getProduceTreeByCode } from '@/api/custom';
+  import moment from 'moment';
+  import { cityData } from 'ele-admin/packages/utils/regions';
+  import { Link } from 'element-ui';
+  import { contactDetail } from '@/api/eos';
+  export default {
+    name: 'project-form',
+    components: { fileUpload, PersonSelect, customDialog, contractListDialog },
+    props: {
+      dialogType: {
+        type: String,
+        default: ''
+      },
+      dialogForm: {
+        type: Object,
+        default: () => {
+          return {
+            ...this.form
+          };
         }
-      }
-    },
-    teamList: {
-      type: Array,
-      default: () => {
-        return []
-      }
-    },
-    deptList: {
-      type: Array,
-      default: () => {
-        return []
-      }
-    },
-    deptTreeList: {
-      type: Array,
-      default: () => {
-        return []
-      }
-    },
-  },
-  watch: {
-    dialogForm: {
-      handler(val) {
-        this.form = {...this.dialogForm}
-        this.$nextTick(async () => {
-          await this.getUserList(this.dialogForm.responsibleDeptId);
-        })
       },
-      deep: true,
-    },
-  },
-  data() {
-    return {
-      form: {
-        budget: '',
-        unit: '1',
-        code: "",
-        contactId: '',
-        contactName: "",
-        contactRelationPhone: "",
-        contactRelationUserId: '',
-        contactRelationUserName: "",
-        content: "",
-        cycle: "",
-        deptUserId: '',
-        deptUserName: "",
-        level: "",
-        monitorUserId: '',
-        monitorUserName: "",
-        planStartDate: "",
-        planEndDate: "",
-        proportion: undefined,
-        name: "",
-        parentId: '',
-        remark: "",
-        responsibleUserId: '',
-        responsibleUserName: "",
-        responsibleDeptId: "",
-        responsibleDeptName: "",
-        stage: "",
-        teamId: "",
-        teamName: "",
-        type: '',
-        contractId: '',
-        contractName: '',
-        files: [],
+      teamList: {
+        type: Array,
+        default: () => {
+          return [];
+        }
       },
-      typeTreeList: [],
-      projectList: [],
-      customDialogFlag: false,
-      contractDialogFlag: false,
-      rules: {
-        type: {required: true, message: '请选择项目类型', trigger: 'change'},
-        name: {required: true, message: '请输入项目名称', trigger: 'blur'},
-        budget: {required: true, message: '请输入项目预算', trigger: 'blur'},
-        teamId: {required: true, message: '请选择项目团队', trigger: 'change'},
-        responsibleDeptId: {required: true, message: '请选择负责部门', trigger: 'change'},
-        responsibleUserId: {required: true, message: '请选择项目经理', trigger: 'change'},
-        planStartDate: {required: true, message: '请选择计划开始日期', trigger: 'change'},
-        planEndDate: {required: true, message: '请选择计划完成日期', trigger: 'change'},
-        code: {required: true, message: '请输入项目编码', trigger: ['blur', 'change']},
+      deptList: {
+        type: Array,
+        default: () => {
+          return [];
+        }
+      },
+      deptTreeList: {
+        type: Array,
+        default: () => {
+          return [];
+        }
       }
-    }
-  },
-  async created() {
-    this.projectList = await projectsToTreeAPI({processStatus: '2', treeType: '0'})
-    this.typeTreeList = await getProduceTreeByCode('XM1');
-  },
-
-  methods: {
-    setCycleValue(val,prop){
-      if(!this.form[prop] || !val)  return this.form.cycle = ''
-      const a = moment(this.form.planEndDate);
-      const b = moment(this.form.planStartDate);
-      this.form.cycle =  a.diff(b, 'days') + 1 + ' 天' // 1
-    },
-    async changeType(val) {
-     // this.form.code = await getProjectCode(val)
     },
-    async teamChange(val) {
-      let find = this.teamList.find(e => e.id == val) || {}
-      this.form.teamName = find.name
-      this.$emit('teamChange', val)
-    },
-    // 选择负责人部门
-    changeDeptInfo(id) {
-      const info = this.deptList.find((e) => e.id == id) || {};
-      this.form.responsibleDeptName = info.name;
-      this.form.responsibleUserId = '';
-      this.form.responsibleUserName = '';
-      this.getUserList(id);
-    },
-    // 获取人员数据
-    getUserList(groupId) {
-      if (groupId) {
-        this.$refs.directorRef&&this.$refs.directorRef.getList({groupId});
+    watch: {
+      dialogForm: {
+        handler(val) {
+          this.form = { ...this.dialogForm };
+          // 回显地址选择器
+          if (
+            this.form.contactAddressId &&
+            this.form.contactAddressId.length > 0
+          ) {
+            this.form.contactAddressId = this.form.contactAddressId.split(',');
+          }
+          this.$nextTick(async () => {
+            await this.getUserList(this.dialogForm.responsibleDeptId);
+          });
+        },
+        deep: true
       }
     },
-    handleContractBtn(e) {
-      if (e.target.nodeName == 'I') {
-        this.form = Object.assign({}, this.form, {
-          contractName: '',
-          contractId: '',
+    data() {
+      return {
+        cityData,
+        linkNameOptions: [],
+        form: {
+          budget: '',
+          unit: '1',
+          code: '',
           contactId: '',
           contactName: '',
           contactRelationPhone: '',
-        });
-        return
-      }
-      this.contractDialogFlag = true;
-    },
-    //选择合同信息回调
-    getContractInfo(obj) {
-      this.form.contractId = obj.id
-      this.form.contractName = obj.contractName
-      if (obj.type == 1) {
-        this.form.contactId = obj.partaId
-        this.form.contactName = obj.partaName
-        this.form.contactRelationPhone = obj.partaTel
-      } else {
-        this.form.contactId = obj.partbId
-        this.form.contactName = obj.partbName
-        this.form.contactRelationPhone = obj.partbTel
-      }
-    },
-    //获取客户信息
-    handleGetCus() {
-      this.customDialogFlag = true;
-      let item = {id: this.form.contactId};
-      this.$nextTick(() => {
-        this.$refs.customRef.open(item);
-      })
+          contactRelationUserId: '',
+          contactRelationUserName: '',
+          content: '',
+          cycle: '',
+          deptUserId: '',
+          deptUserName: '',
+          level: '',
+          monitorUserId: '',
+          monitorUserName: '',
+          planStartDate: '',
+          planEndDate: '',
+          proportion: undefined,
+          name: '',
+          parentId: '',
+          remark: '',
+          responsibleUserId: '',
+          responsibleUserName: '',
+          responsibleDeptId: '',
+          responsibleDeptName: '',
+          stage: '',
+          teamId: '',
+          teamName: '',
+          type: '',
+          contractId: '',
+          contractName: '',
+          files: []
+        },
+        typeTreeList: [],
+        projectList: [],
+        customDialogFlag: false,
+        contractDialogFlag: false,
+        rules: {
+          type: {
+            required: true,
+            message: '请选择项目类型',
+            trigger: 'change'
+          },
+          name: { required: true, message: '请输入项目名称', trigger: 'blur' },
+          budget: {
+            required: true,
+            message: '请输入项目预算',
+            trigger: 'blur'
+          },
+          teamId: {
+            required: true,
+            message: '请选择项目团队',
+            trigger: 'change'
+          },
+          responsibleDeptId: {
+            required: true,
+            message: '请选择负责部门',
+            trigger: 'change'
+          },
+          responsibleUserId: {
+            required: true,
+            message: '请选择项目经理',
+            trigger: 'change'
+          },
+          planStartDate: {
+            required: true,
+            message: '请选择计划开始日期',
+            trigger: 'change'
+          },
+          planEndDate: {
+            required: true,
+            message: '请选择计划完成日期',
+            trigger: 'change'
+          },
+          code: {
+            required: true,
+            message: '请输入项目编码',
+            trigger: ['blur', 'change']
+          }
+        }
+      };
     },
-    //选择客户信息回调
-    getCusInfo(obj) {
-      this.form = Object.assign({}, this.form, {
-        contactId: obj.id,
-        contactName: obj.name,
-        contactRelationPhone: obj.phone,
+    async created() {
+      this.projectList = await projectsToTreeAPI({
+        processStatus: '2',
+        treeType: '0'
       });
+      this.typeTreeList = await getProduceTreeByCode('XM1');
     },
-    downloadFile(file) {
-      getFile({objectName: file.storePath}, file.type);
-    },
-    personChange(val, info) {
-      this.form.responsibleUserName = info.name;
-    },
-    validForm() {
-      return new Promise((resolve, reject) => {
-        this.$refs.form.validate(valid => {
-          if (!valid) {
-            this.$message.warning('有必填项未填,请检查')
-            reject('有必填项未填,请检查')
-          } else {
-            resolve(this.form)
-          }
-        })
-      })
+
+    methods: {
+      setCycleValue(val, prop) {
+        if (!this.form[prop] || !val) return (this.form.cycle = '');
+        const a = moment(this.form.planEndDate);
+        const b = moment(this.form.planStartDate);
+        this.form.cycle = a.diff(b, 'days') + 1 + ' 天'; // 1
+      },
+      async changeType(val) {
+        // this.form.code = await getProjectCode(val)
+      },
+      async teamChange(val) {
+        let find = this.teamList.find((e) => e.id == val) || {};
+        this.form.teamName = find.name;
+        this.$emit('teamChange', val);
+      },
+      // 选择负责人部门
+      changeDeptInfo(id) {
+        const info = this.deptList.find((e) => e.id == id) || {};
+        this.form.responsibleDeptName = info.name;
+        this.form.responsibleUserId = '';
+        this.form.responsibleUserName = '';
+        this.getUserList(id);
+      },
+      // 获取人员数据
+      getUserList(groupId) {
+        if (groupId) {
+          this.$refs.directorRef && this.$refs.directorRef.getList({ groupId });
+        }
+      },
+      handleContractBtn(e) {
+        if (e.target.nodeName == 'I') {
+          this.form = Object.assign({}, this.form, {
+            contractName: '',
+            contractId: '',
+            contactId: '',
+            contactName: '',
+            contactRelationPhone: ''
+          });
+          return;
+        }
+        this.contractDialogFlag = true;
+      },
+      //选择合同信息回调
+      getContractInfo(obj) {
+        this.form.contractId = obj.id;
+        this.form.contractName = obj.contractName;
+        if (obj.type == 1) {
+          this.form.contactId = obj.partaId;
+          this.form.contactName = obj.partaName;
+          this.getCusInfo({ id: obj.partaId });
+        } else {
+          this.form.contactId = obj.partbId;
+          this.form.contactName = obj.partbName;
+          this.getCusInfo({ id: obj.partbId });
+        }
+      },
+      //获取客户信息
+      handleGetCus() {
+        this.customDialogFlag = true;
+        let item = { id: this.form.contactId };
+        this.$nextTick(() => {
+          this.$refs.customRef.open(item);
+        });
+      },
+      //选择客户信息回调
+      async getCusInfo(obj) {
+        const { base, other } = await contactDetail(obj.id);
+        this.form = Object.assign({}, this.form, {
+          contactId: base.id,
+          contactName: base.name,
+          contactRelationPhone: obj.phone,
+          contactRelationUserName: obj.linkName
+        });
+        if (other.addressId) {
+          this.form.contactAddressId =
+            other.addressId && other.addressId.split(',');
+          this.form.contactAddressName = other.addressName;
+          this.form.address = other.address;
+        } else if (base.addressId) {
+          this.form.contactAddressId =
+            base.addressId && base.addressId.split(',');
+          this.form.contactAddressName = base.addressName;
+          this.form.address = base.address;
+        }
+      },
+      downloadFile(file) {
+        getFile({ objectName: file.storePath }, file.type);
+      },
+      personChange(val, info) {
+        this.form.responsibleUserName = info.name;
+      },
+      validForm() {
+        return new Promise((resolve, reject) => {
+          this.$refs.form.validate((valid) => {
+            if (!valid) {
+              this.$message.warning('有必填项未填,请检查');
+              reject('有必填项未填,请检查');
+            } else {
+              // 基本信息处理
+              if (this.$refs.sendAddress.getCheckedNodes()) {
+                let node = this.$refs.sendAddress.getCheckedNodes()[0];
+                if (node) {
+                  this.form.contactAddressId = node.path.join();
+                  this.form.contactAddressName = node.pathLabels.join();
+                } else {
+                  this.form.contactAddressId = '';
+                  this.form.contactAddressName = '';
+                }
+              }
+              resolve(this.form);
+            }
+          });
+        });
+      }
     }
-  }
-}
+  };
 </script>
 
-
-<style scoped lang="scss">
-
-</style>
+<style scoped lang="scss"></style>