yusheng 1 год назад
Родитель
Сommit
18fb9c6229

+ 288 - 0
src/BIZComponents/orderListDialog/orderListDialog.vue

@@ -0,0 +1,288 @@
+<template>
+  <el-dialog
+    title="选择订单"
+    custom-class="ele-dialog-form long-dialog-form"
+    :visible.sync="visible"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    top="5vh"
+    :close-on-press-escape="false"
+    append-to-body
+    width="70%"
+  >
+    <el-card shadow="never">
+      <searchTable @search="reload"></searchTable>
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        row-key="id"
+        height="calc(100vh - 500px)"
+        class="dict-table"
+        @cell-click="cellClick"
+      >
+        <!-- 表头工具栏 -->
+        <template v-slot:action="{ row }">
+          <el-radio v-if="!isAcc" class="radio" v-model="radio" :label="row.id"
+            ><i></i
+          ></el-radio>
+          <el-button
+            v-if="isAcc"
+            :disabled="row.hasInvoiceApply"
+            type="primary"
+            @click="selected1(row)"
+          >
+            选择
+          </el-button>
+        </template>
+      </ele-pro-table>
+    </el-card>
+
+    <div class="btns" slot="footer">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import searchTable from './searchTable.vue';
+  import { getTableList } from '@/api/eos/saleorder';
+  import AssetTree from '@/components/AssetTree';
+
+  export default {
+    components: {
+      AssetTree,
+      searchTable
+    },
+    props: {
+      searchParams: {
+        type: Object,
+        default: () => {}
+      },
+      contactData: {
+        type: Object,
+        default: () => {
+          return {};
+        }
+      }
+    },
+    data() {
+      return {
+        visible: false,
+        currentIndex: null,
+        columns: [
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            action: 'action',
+            slot: 'action',
+            align: 'center',
+            label: '选择',
+            minWidth: 100
+          },
+
+          {
+            prop: 'orderNo',
+            label: '订单编码',
+            align: 'center',
+            slot: 'orderNo',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+
+          {
+            prop: 'saleTypeName',
+            label: '销售类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+          {
+            prop: 'contractName',
+            label: '合同名称',
+            align: 'center',
+            slot: 'contractName',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            prop: 'deliveryDate',
+            label: '交货日期',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            prop: 'saleTypeName',
+            label: '销售类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+          {
+            prop: 'partaName',
+            label: '客户名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 180
+          },
+          {
+            prop: 'partaLinkName',
+            label: '客户联系人',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 130
+          },
+
+          {
+            prop: 'partaTel',
+            label: '客户联系电话',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 130
+          },
+          {
+            prop: 'partbName',
+            label: '售出方名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 130
+          },
+          {
+            prop: 'partbLinkName',
+            label: '售出方联系人',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 130
+          },
+          {
+            prop: 'partbTel',
+            label: '售出方联系电话',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 130
+          },
+          {
+            prop: 'payAmount',
+            label: '应付金额(元)',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 170
+          },
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 170
+          }
+        ],
+
+        radio: null,
+        isAcc: false
+      };
+    },
+
+    methods: {
+      open(item, currentIndex, isAcc = false) {
+        this.currentIndex = currentIndex;
+        if (item && item.id) {
+          this.radio = item.id;
+        }
+        this.isAcc = isAcc;
+        this.visible = true;
+      },
+
+      /* 表格数据源 */
+      datasource({ page, limit, where, order }) {
+        if (this.contactData.id) {
+          where['contactId'] = this.contactData.id;
+        }
+        return getTableList({
+          pageNum: page,
+          size: limit,
+          ...where,
+          orderStatus: 2,
+          ...this.searchParams
+        });
+      },
+
+      /* 刷新表格 */
+      reload(where) {
+        where = {
+          ...where,
+          ...this.searchParams
+        };
+        this.$refs.table.reload({ pageNum: 1, where: where });
+      },
+
+      handleNodeClick(data, node) {
+        this.reload({ categoryId: data.id });
+      },
+
+      // 单击获取id
+      cellClick(row) {
+        this.current = row;
+        console.log(row);
+        this.radio = row.id;
+      },
+      handleClose() {
+        this.visible = false;
+        this.current = null;
+        this.radio = '';
+      },
+
+      selected() {
+        if (!this.current) {
+          return this.$message.warning('请至少选择一条数据');
+        }
+        this.$emit('changeParent', this.current, this.currentIndex);
+        this.handleClose();
+      },
+      selected1(row) {
+        this.$emit('changeParent', row);
+        this.handleClose();
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .tree_col {
+    border: 1px solid #eee;
+    padding: 10px 0;
+    box-sizing: border-box;
+    height: 500px;
+    overflow: auto;
+  }
+
+  .table_col {
+    padding-left: 10px;
+
+    ::v-deep .el-table th.el-table__cell {
+      background: #f2f2f2;
+    }
+  }
+
+  .pagination {
+    text-align: right;
+    padding: 10px 0;
+  }
+
+  .btns {
+    text-align: center;
+    padding: 10px 0;
+  }
+
+  .topsearch {
+    margin-bottom: 15px;
+  }
+</style>

+ 168 - 0
src/BIZComponents/orderListDialog/searchTable.vue

@@ -0,0 +1,168 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="100px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="订单编码:" prop="orderNo">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="params.orderNo"
+          ></el-input>
+
+        </el-form-item>
+
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">
+        <el-form-item label="客户名称:" prop="partaName">
+          <el-input
+          placeholder="请输入"
+           v-model.trim="params.partaName" controls-position="right" >
+          </el-input>
+
+        </el-form-item>
+
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">
+        <el-form-item label="合同编码:" prop="contractNo">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="params.contractNo"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">
+        <el-form-item label="合同编号:" prop="contractNumber">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="params.contractNumber"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <el-row :gutter="15">
+      <!--<el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">
+        <el-form-item label="订单状态:" prop="orderStatus">
+          <el-select v-model="params.orderStatus" placeholder="请选择" class="w100" clearable>
+            <el-option
+              v-for="item in orderStatusOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-col>-->
+      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">
+        <el-form-item label="产品名称:" prop="productName">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="params.productName"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">
+        <el-form-item label="创建时间:" prop="createTimeStart">
+          <el-date-picker
+            v-model="createTime"
+            @change="changeDate"
+            type="datetimerange"
+            style="width:100%"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            :default-time="['00:00:00', '23:59:59']">
+          </el-date-picker>
+        </el-form-item>
+
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="项目名称:">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="params.projectName"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col style="display: flex;justify-content: end" v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          class="ele-btn-icon"
+          @click="search"
+        >
+          查询
+        </el-button>
+        <el-button @click="reset">重置</el-button>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+<script>
+import {deliveryStatusOptions,orderStatusOptions,payStatusOptions} from '@/enum/dict';
+  export default {
+    data () {
+      // 默认表单数据
+      const defaultParams = {
+        productName: '',
+        contractNo: '',
+        contractName: '',
+        contractNumber: '',
+        contractId:'',
+        createTimeStart:'',
+        createTimeEnd:'',
+        deliveryStatus:'',
+        orderNo:'',
+        orderStatus: '',
+        partaId:'',
+        partaName:'',
+        projectName: '',
+        projectId:'',
+      };
+      return {
+        deliveryStatusOptions,
+        orderStatusOptions,
+        payStatusOptions,
+        createTime:[],
+        defaultParams,
+        // 表单数据
+        params: { ...defaultParams }
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive () {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    methods: {
+      //选择时间
+      changeDate(e){
+       this.createTime=e
+      },
+      /* 搜索 */
+      search () {
+        const [createTimeStart,createTimeEnd]=this.createTime
+        this.params=Object.assign({},this.params,{createTimeStart,createTimeEnd})
+        this.$emit('search', {
+          ...this.params
+        });
+      },
+      /*  重置 */
+      reset () {
+        this.createTime=[]
+        this.params = Object.assign({},{ ...this.defaultParams });
+        this.search();
+      }
+    }
+  };
+</script>

+ 141 - 0
src/api/eos/saleorder.js

@@ -0,0 +1,141 @@
+import request from '@/utils/request';
+import { download } from '@/utils/file';
+/**
+ * 获取信息列表
+ */
+export async function getTableList(params) {
+  const res = await request.get(`/eom/saleorder/page`, { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 查询仓库列表
+ */
+export async function getWarehouseList() {
+  const res = await request.post(`/wms/warehouse/select/warehouseList`, {
+    params: { status: 1 }
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 查询库存仓库列表
+ */
+export async function getIdWarehouseList(params) {
+  const res = await request.get(`/wms/stockpackingtwo/getWarehouseList`, { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 查询库存可用数
+ */
+export async function getWarehouseOutStock(params) {
+  const res = await request.get(`/wms/stocktwo/getWarehouseOutStock`, { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 获取信息详情
+ */
+export async function getSaleOrderDetail(id) {
+  const res = await request.get(`/eom/saleorder/getById/${id}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 更新信息
+ */
+export async function UpdateInformation(data) {
+  const res = await request.put(`/eom/saleorder/update`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 新增信息
+ */
+export async function addInformation(data) {
+  const res = await request.post(`/eom/saleorder/save`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 删除
+ */
+export async function deleteInformation(data) {
+  const res = await request.delete('/eom/saleorder/delete', { data });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 导出报价单
+ */
+export async function getExport(id) {
+  const res = await request.get(`/eom/quote/export/${id}`, {
+    responseType: 'blob'
+  });
+
+  download(res.data, '报价单.xlsx');
+}
+
+/**
+ * 销售订单变更
+ */
+export async function orderChange(data) {
+  const res = await request.post(`/eom/saleorder/change`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 提交
+ */
+export async function submit(data) {
+  const res = await request.post(`/bpm/salesOrderApprove/submit`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 摘要卡片
+ */
+ export async function queryOrderNoCount(code) {
+  const res = await request.get(`/eom/saleorder/queryOrderNoCount/${code}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+/**
+ * 催单
+ */
+ export async function saleOrderReminder(id) {
+  const res = await request.get(`/eom/saleorder/saleOrderReminder/${id}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 11 - 0
src/api/project-manage/index.js

@@ -11,6 +11,17 @@ export async function projectsPageAPI(data) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+/**
+ * 我的项目
+ * @data data
+ */
+export async function getMyProjectsPage(data) {
+  const res = await request.post('/pro/projects/getMyPage', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
 /**
  * 项目保存
  * @data data

+ 11 - 0
src/api/project-manage/plan.js

@@ -12,6 +12,17 @@ export async function projectsPlanPageAPI(data) {
   return Promise.reject(new Error(res.data.message));
 }
 
+/**
+ * 查询我的计划列表
+ * @data data
+ */
+export async function myProjectsPlanPageAPI(data) {
+  const res = await request.post('/pro/targetplan/getMyPage', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
 /**
  * 保存计划
  * @data data

+ 11 - 0
src/api/project-manage/task.js

@@ -11,6 +11,17 @@ export async function projectsTaskPageAPI(data) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+/**
+ * 查询我的任务列表
+ * @data data
+ */
+export async function myProjectsTaskPageAPI(data) {
+  const res = await request.post('/pro/projectstask/getMyPage', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
 
 /**
  * 保存任务

+ 2 - 1
src/config/setting.js

@@ -27,7 +27,8 @@ export const WHITE_LIST = ['/login', '/forget'];
 export const KEEP_ALIVE_EXCLUDES = [
   '/pro-page/index',
   '/pro-page/page2',
-  '/page-pro/project-initiation',
+  '/page-pro/project-manage/project-initiation',
+  '/page-pro/project-myProject',
   '/page-pro/planManage',
   '/page-pro/task-manage',
   '/page-pro/team-manage'

Разница между файлами не показана из-за своего большого размера
+ 666 - 695
src/views/BOMmanage/ProjectDetailDialog.vue


+ 1 - 0
src/views/project-manage/planManage/components/addDialog.vue

@@ -3,6 +3,7 @@
     custom-class="ele-dialog-form long-dialog-form"
     :centered="true"
     :visible.sync="addDialogFlag"
+    append-to-body
     :title="title"
     :close-on-click-modal="false"
     width="70%"

+ 1 - 0
src/views/project-manage/planManage/components/addOrEditDialog.vue

@@ -4,6 +4,7 @@
     :centered="true"
     :visible.sync="addOrEditDialogFlag"
     :title="title"
+    append-to-body
     :close-on-click-modal="false"
     width="70%"
     :before-close="cancel">

+ 8 - 1
src/views/project-manage/planManage/index.vue

@@ -281,6 +281,7 @@
   import {
     projectsPlanDeleteAPI,
     projectsPlanPageAPI,
+    myProjectsPlanPageAPI,
     submit,
     planFinishAPI,
     planPauseAPI,
@@ -314,6 +315,11 @@
         default: ''
       }
     },
+    watch: {
+      $route(){
+        this.reload&&this.reload()
+      }
+    },
     computed: {
       ...mapGetters(['getDictValue']),
 
@@ -519,6 +525,7 @@
       async datasource({ page, limit, where, parent }) {
         await this.getDictList('pro_projects_status');
         await this.getDictList('pro_projects_type');
+        const api=this.$route.path=='/planManage'?projectsPlanPageAPI:myProjectsPlanPageAPI
         let paramAttr = '';
         switch (this.projectType) {
           case 1:
@@ -530,7 +537,7 @@
           default:
             paramAttr = 'projectId';
         }
-        return projectsPlanPageAPI({
+        return api({
           pageNum: page,
           size: limit,
           ...where,

+ 1 - 2
src/views/project-manage/project-calendar/index.vue

@@ -207,9 +207,8 @@ export default {
         parentId: parent?.id ?? '0',
         ...where
       });
-      console.log(data);
       this.showGantt = true
-      this.tableData = data.map(item => {
+      this.tableData = data.list.map(item => {
         let obj = {
           ...item,
           parentId:item.id

+ 114 - 127
src/views/project-manage/project-initiation/components/project-form.vue

@@ -1,32 +1,5 @@
 <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-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"
@@ -37,8 +10,6 @@
       <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>-->
             <ele-tree-select
               filterable
               :disabled="dialogType == 'view'"
@@ -70,8 +41,7 @@
             ></el-input>
           </el-form-item>
         </el-col>
-      </el-row>
-      <el-row>
+
         <el-col :span="8">
           <el-form-item label="从属项目">
             <ele-tree-select
@@ -115,8 +85,7 @@
             />
           </el-form-item>
         </el-col>
-      </el-row>
-      <el-row>
+
         <el-col :span="8">
           <el-form-item prop="teamId" label="项目团队">
             <el-select
@@ -168,8 +137,7 @@
             ></dict-selection>
           </el-form-item>
         </el-col>
-      </el-row>
-      <el-row>
+
         <el-col :span="8">
           <el-form-item prop="planStartDate" label="计划开始日期">
             <el-date-picker
@@ -224,19 +192,27 @@
             ></el-input>
           </el-form-item>
         </el-col>
-
-        <!--        <el-col :span="8">-->
-        <!--          <el-form-item label="权重占比">-->
-        <!--            <el-input type="number" :min="0" :max="100" v-model="form.proportion" :disabled="dialogType=='view'">-->
-        <!--              <template slot="append">-->
-        <!--                %-->
-        <!--              </template>-->
-        <!--            </el-input>-->
-        <!--          </el-form-item>-->
-        <!--        </el-col>-->
-      </el-row>
-      <el-row>
         <el-col :span="8">
+          <el-form-item prop="relationType" label="关联类型">
+            <el-select
+              v-model="form.relationType"
+              placeholder="请选择"
+              @change="typeChange"
+              style="width: 100%"
+              :disabled="dialogType == 'view'"
+            >
+              <el-option
+                v-for="item in typeOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="8" v-if="form.relationType == 3">
           <el-form-item label="关联合同" prop="contractName">
             <el-input
               :disabled="dialogType == 'view'"
@@ -246,46 +222,32 @@
             />
           </el-form-item>
         </el-col>
+        <el-col :span="8" v-if="form.relationType == 1">
+          <el-form-item label="关联订单" prop="relationCode">
+            <el-input
+              :disabled="dialogType == 'view'"
+              clearable
+              v-model="form.relationCode"
+              @click.native="handleOrder"
+            />
+          </el-form-item>
+        </el-col>
         <el-col :span="8">
           <el-form-item label="客户名称">
             <el-input
               v-model="form.contactName"
               @click.native="handleGetCus"
               readonly
-              :disabled="dialogType == 'view' || !!form.contractName"
+              :disabled="dialogType == 'view' || !!form.relationId"
             ></el-input>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <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-input v-model="form.contactRelationUserName"  :disabled="dialogType == 'view'"></el-input>
           </el-form-item>
         </el-col>
 
-        <!--        <el-col :span="8">-->
-        <!--          <el-form-item-->
-        <!--            prop="stage"-->
-        <!--            label="项目阶段">-->
-        <!--            <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
@@ -312,8 +274,7 @@
             ></el-input>
           </el-form-item>
         </el-col>
-      </el-row>
-      <el-row>
+
         <el-col :span="16">
           <el-form-item label="项目简介">
             <el-input
@@ -327,32 +288,9 @@
         <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>
         </el-col>
       </el-row>
-      <!--      <el-row>-->
-      <!--        <el-col :span="24">-->
-      <!--          <el-form-item label="备注">-->
-      <!--            <el-input type="textarea" :rows="2" v-model="form.remark" :disabled="dialogType=='view'"></el-input>-->
-      <!--          </el-form-item>-->
-      <!--        </el-col>-->
-      <!--      </el-row>-->
     </el-form>
     <custom-dialog
       v-if="customDialogFlag"
@@ -366,6 +304,10 @@
       :contractDialogFlag.sync="contractDialogFlag"
       @changeParent="getContractInfo"
     ></contractListDialog>
+    <orderListDialog
+      ref="orderListRef"
+      @changeParent="getOrderDialog"
+    ></orderListDialog>
   </div>
 </template>
 
@@ -376,14 +318,21 @@
   import fileUpload from '@/BIZComponents/addDoc/index.vue';
   import { getFile } from '@/api/system/file';
   import contractListDialog from '@/views/project-manage/components/contractListDialog.vue';
+  import orderListDialog from '@/BIZComponents/orderListDialog/orderListDialog.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 },
+    components: {
+      fileUpload,
+      PersonSelect,
+      customDialog,
+      contractListDialog,
+      orderListDialog
+    },
     props: {
       dialogType: {
         type: String,
@@ -409,7 +358,7 @@
           return [];
         }
       },
-      
+
       deptTreeList: {
         type: Array,
         default: () => {
@@ -438,7 +387,16 @@
     data() {
       return {
         cityData,
-        linkNameOptions: [],
+        typeOptions: [
+          {
+            value: 1,
+            label: '订单'
+          },
+          {
+            value: 3,
+            label: '合同'
+          }
+        ],
         form: {
           budget: '',
           unit: '1',
@@ -471,7 +429,8 @@
           type: '',
           contractId: '',
           contractName: '',
-          files: []
+          files: [],
+          relationType: 1
         },
         typeTreeList: [],
         projectList: [],
@@ -484,27 +443,27 @@
             trigger: 'change'
           },
           name: { required: true, message: '请输入项目名称', trigger: 'blur' },
-          budget: {
-            required: true,
-            message: '请输入项目预算',
-            trigger: 'blur'
-          },
-          contactName: {
-            required: true,
-            message: '请选择客户',
-            trigger: 'blur'
-          },
-          
+          // budget: {
+          //   required: true,
+          //   message: '请输入项目预算',
+          //   trigger: 'blur'
+          // },
+          // contactId: {
+          //   required: true,
+          //   message: '请选择客户',
+          //   trigger: 'blur'
+          // },
+
           teamId: {
             required: true,
             message: '请选择项目团队',
             trigger: 'change'
           },
-          responsibleDeptId: {
-            required: true,
-            message: '请选择负责部门',
-            trigger: 'change'
-          },
+          // responsibleDeptId: {
+          //   required: true,
+          //   message: '请选择负责部门',
+          //   trigger: 'change'
+          // },
           responsibleUserId: {
             required: true,
             message: '请选择项目经理',
@@ -567,21 +526,43 @@
       },
       handleContractBtn(e) {
         if (e.target.nodeName == 'I') {
-          this.form = Object.assign({}, this.form, {
-            contractName: '',
-            contractId: '',
-            contactId: '',
-            contactName: '',
-            contactRelationPhone: ''
-          });
+          this.clearInfo();
           return;
         }
         this.contractDialogFlag = true;
       },
+      handleOrder() {
+        this.$refs.orderListRef.open();
+      },
+ 
+      clearInfo() {
+        this.form = Object.assign({}, this.form, {
+          contractName: '',
+          contractId: '',
+          contactId: '',
+          contactName: '',
+          contactRelationPhone: '',
+          contactRelationUserName: '',
+          contactAddressId: '',
+          contactAddress: '',
+          relationId: '',
+          relationId: '',
+          relationName: '',
+          relationCode: ''
+        });
+      },
+      typeChange() {
+        this.clearInfo();
+      },
+
       //选择合同信息回调
       getContractInfo(obj) {
         this.form.contractId = obj.id;
         this.form.contractName = obj.contractName;
+        this.form.relationId = obj.id;
+        this.form.relationName = obj.contractName;
+        this.form.relationCode = obj.contractNo;
+
         if (obj.type == 1) {
           this.form.contactId = obj.partaId;
           this.form.contactName = obj.partaName;
@@ -592,6 +573,12 @@
           this.getCusInfo({ id: obj.partbId });
         }
       },
+      //选择订单信息回调
+      getOrderDialog(obj){
+        this.form.relationId = obj.id;
+        this.form.relationCode = obj.orderNo;
+        this.getCusInfo({ id: obj.partaId });
+      },
       //获取客户信息
       handleGetCus() {
         this.customDialogFlag = true;
@@ -606,7 +593,7 @@
         this.form = Object.assign({}, this.form, {
           contactId: base.id,
           contactName: base.name,
-          contactRelationPhone:obj.linkPhone|| obj.phone,
+          contactRelationPhone: obj.linkPhone || obj.phone,
           contactRelationUserName: obj.linkName
         });
         if (other.addressId) {

+ 14 - 3
src/views/project-manage/project-initiation/index.vue

@@ -37,6 +37,7 @@
               :tree-props="{ children: 'projectList' }"
               @done="onDone"
               :indent="15"
+              :initLoad="false"
             >
               <!--        :lazy="true"-->
               <!-- 表头工具栏 -->
@@ -321,7 +322,8 @@
     projectsFinishAPI,
     projectsPauseAPI,
     projectsStartupAPI,
-    projectsTerminationAPI
+    projectsTerminationAPI,
+    getMyProjectsPage
   } from '@/api/project-manage';
   import { reviewStatusEnum } from '@/enum/dict';
   import { mapGetters } from 'vuex';
@@ -535,7 +537,14 @@
         expandAllFlag: false
       };
     },
-    async created() {},
+    async created() {
+      console.log(111);
+    },
+    watch: {
+      $route(){
+        this.reload&&this.reload()
+      }
+    },
     methods: {
       getDictV(code, val) {
         if (!this.dictList[code]) return '';
@@ -575,7 +584,9 @@
         await this.getDictList('pro_projects_status');
         await this.getDictList('pro_projects_type');
         await this.getDictList('pro_projects_budget_unit');
-        return projectsPageAPI({
+        // /project-manage/myProject
+        const api=this.$route.path=='/project-manage'?projectsPageAPI:getMyProjectsPage
+        return api({
           pageNum: page,
           size: limit,
           parentId: parent?.id ?? '0',

+ 3 - 2
src/views/project-manage/task-manage/index.vue

@@ -201,7 +201,7 @@ import addOrEditDialog from "./components/addOrEditDialog.vue";
 import submitDeliverablesDialog from "./components/submitDeliverablesDialog.vue";
 import detailDialog from "./components/detailDialog.vue";
 import popModal from '@/components/pop-modal';
-import {projectsTaskDeleteAPI, projectsTaskOpRation, projectsTaskPageAPI} from "@/api/project-manage/task";
+import {projectsTaskDeleteAPI, projectsTaskOpRation, projectsTaskPageAPI,myProjectsTaskPageAPI} from "@/api/project-manage/task";
 import {proStatusEnum, reviewStatusEnum} from '@/enum/dict';
 import {mapGetters} from "vuex";
 import {getByCode} from "@/api/system/dictionary-data";
@@ -430,7 +430,8 @@ export default {
     /* 表格数据源 */
     async datasource({page, limit, where, parent}) {
       await this.getDictList('task_type')
-      return projectsTaskPageAPI({
+      const api=this.$route.path=='/task/taskList'?projectsTaskPageAPI:myProjectsTaskPageAPI
+      return api({
         pageNum: page,
         size: limit,
         ...where

Некоторые файлы не были показаны из-за большого количества измененных файлов