Просмотр исходного кода

feature: 合同添加展示所有交付工单、项目添加展示所有工单

liuyaqi 2 лет назад
Родитель
Сommit
c8a9405fa0

+ 129 - 0
src/views/contract/components/DetailsDeliver.vue

@@ -0,0 +1,129 @@
+<template>
+  <div style="height: 100%">
+    <el-table v-loading="listLoading" border :data="list" height="calc(100% - 42px)">
+      <el-table-column
+        v-for="(item, index) in columns"
+        :key="index"
+        align="center"
+        :label="item.label"
+        :min-width="item.width"
+        :prop="item.prop"
+        show-overflow-tooltip>
+        <template #default="{ row }">
+          <el-button v-if="item.prop === 'orderCode'" style="font-size: 14px" type="text" @click="handleDetail(row)">
+            {{ row.orderCode }}
+          </el-button>
+          <span v-else-if="item.prop === 'orderType'">
+            {{ row.orderType == '10' ? '软件' : '硬件' }}
+          </span>
+          <span v-else-if="item.prop === 'product'">
+            {{ selectDictLabel(productLineOptions, row.product) }}
+          </span>
+          <span v-else-if="item.prop === 'orderStatus'">
+            {{ selectDictLabel(deliveryStatusOptions, row.orderStatus) }}
+          </span>
+          <span v-else-if="item.prop === 'createdTime'">
+            {{ parseTime(row.createdTime, '{y}-{m}-{d}') }}
+          </span>
+          <span v-else>{{ row[item.prop] }}</span>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+  import deliverApi from '@/api/work/deliver'
+  import to from 'await-to-js'
+
+  export default {
+    name: 'DetailsDeliver',
+    props: {
+      details: {
+        type: Object,
+        default: () => {},
+      },
+    },
+    data() {
+      return {
+        listLoading: false,
+        columns: [
+          {
+            label: '交付工单号',
+            width: '160px',
+            prop: 'orderCode',
+          },
+          {
+            label: '交付状态',
+            width: '160px',
+            prop: 'orderStatus',
+          },
+          {
+            label: '交付类型',
+            width: '160px',
+            prop: 'orderType',
+          },
+          {
+            label: '项目经理',
+            width: '160px',
+            prop: 'projectManName',
+          },
+          {
+            label: '交付经理',
+            width: '160px',
+            prop: 'deliverManName',
+          },
+          {
+            label: '产品线',
+            width: 'auto',
+            prop: 'product',
+          },
+          {
+            label: '完成信息',
+            width: 'auto',
+            prop: 'finishRemark',
+          },
+          {
+            label: '创建时间',
+            width: 'auto',
+            prop: 'createdTime',
+          },
+        ],
+        list: [],
+        deliveryStatusOptions: [],
+        productLineOptions: [],
+      }
+    },
+    mounted() {
+      this.getOptions()
+      this.fetchData()
+    },
+    methods: {
+      getOptions() {
+        Promise.all([this.getDicts('delivery_status'), this.getDicts('sys_product_line')])
+          .then(([deliveryStatus, productLine]) => {
+            this.deliveryStatusOptions = deliveryStatus.data.values || []
+            this.productLineOptions = productLine.data.values || []
+          })
+          .catch((err) => console.log(err))
+      },
+      handleDetail(row) {
+        this.$router.push({
+          path: '/work/deliveryPlan',
+          query: {
+            id: row.id,
+          },
+        })
+      },
+      async fetchData() {
+        this.listLoading = true
+        let params = { contractId: this.details.id, pageNum: 0 }
+        const [err, res] = await to(deliverApi.getDeliverOrderList(params))
+        if (err) return (this.listLoading = false)
+        this.list = res.data.list || []
+        this.total = res.data.total
+        this.listLoading = false
+      },
+    },
+  }
+</script>

+ 5 - 0
src/views/contract/detail.vue

@@ -58,6 +58,9 @@
           <el-tab-pane label="发票" name="invoice">
             <details-invoice v-if="activeName == 'invoice'" :details="details" />
           </el-tab-pane>
+          <el-tab-pane label="交付工单" name="deliver">
+            <details-deliver v-if="activeName == 'deliver'" :details="details" />
+          </el-tab-pane>
           <el-tab-pane label="附件" name="enclosure">
             <details-enclosure v-if="activeName == 'enclosure'" :details="details" />
           </el-tab-pane>
@@ -89,6 +92,7 @@
   import DetailsRecords from './components/DetailsRecords'
   import DetailsInvoice from './components/DetailsInvoice'
   import DetailsEnclosure from './components/DetailsEnclosure'
+  import DetailsDeliver from './components/DetailsDeliver'
   import Edit from './components/Edit'
   import Transfer from './components/Transfer'
 
@@ -101,6 +105,7 @@
       DetailsRecords,
       DetailsInvoice,
       DetailsEnclosure,
+      DetailsDeliver,
       Edit,
       Transfer,
     },

+ 123 - 0
src/views/proj/business/components/DetailsDeliver.vue

@@ -0,0 +1,123 @@
+<template>
+  <div style="height: 100%">
+    <el-table v-loading="listLoading" border :data="list" height="calc(100% - 42px)">
+      <el-table-column
+        v-for="(item, index) in columns"
+        :key="index"
+        align="center"
+        :label="item.label"
+        :min-width="item.width"
+        :prop="item.prop"
+        show-overflow-tooltip>
+        <template #default="{ row }">
+          <el-button v-if="item.prop === 'orderCode'" style="font-size: 14px" type="text" @click="handleDetail(row)">
+            {{ row.orderCode }}
+          </el-button>
+          <span v-else-if="item.prop === 'orderType'">
+            {{ row.orderType == '10' ? '软件' : '硬件' }}
+          </span>
+          <span v-else-if="item.prop === 'product'">
+            {{ selectDictLabel(productLineOptions, row.product) }}
+          </span>
+          <span v-else-if="item.prop === 'orderStatus'">
+            {{ selectDictLabel(deliveryStatusOptions, row.orderStatus) }}
+          </span>
+          <span v-else-if="item.prop === 'createdTime'">
+            {{ parseTime(row.createdTime, '{y}-{m}-{d}') }}
+          </span>
+          <span v-else>{{ row[item.prop] }}</span>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+  import deliverApi from '@/api/work/deliver'
+  import to from 'await-to-js'
+
+  export default {
+    name: 'DetailsDeliver',
+    data() {
+      return {
+        listLoading: false,
+        columns: [
+          {
+            label: '交付工单号',
+            width: '160px',
+            prop: 'orderCode',
+          },
+          {
+            label: '交付状态',
+            width: '160px',
+            prop: 'orderStatus',
+          },
+          {
+            label: '交付类型',
+            width: '160px',
+            prop: 'orderType',
+          },
+          {
+            label: '项目经理',
+            width: '160px',
+            prop: 'projectManName',
+          },
+          {
+            label: '交付经理',
+            width: '160px',
+            prop: 'deliverManName',
+          },
+          {
+            label: '产品线',
+            width: 'auto',
+            prop: 'product',
+          },
+          {
+            label: '完成信息',
+            width: 'auto',
+            prop: 'finishRemark',
+          },
+          {
+            label: '创建时间',
+            width: 'auto',
+            prop: 'createdTime',
+          },
+        ],
+        list: [],
+        deliveryStatusOptions: [],
+        productLineOptions: [],
+      }
+    },
+    methods: {
+      open(id) {
+        this.getOptions()
+        this.fetchData(id)
+      },
+      getOptions() {
+        Promise.all([this.getDicts('delivery_status'), this.getDicts('sys_product_line')])
+          .then(([deliveryStatus, productLine]) => {
+            this.deliveryStatusOptions = deliveryStatus.data.values || []
+            this.productLineOptions = productLine.data.values || []
+          })
+          .catch((err) => console.log(err))
+      },
+      handleDetail(row) {
+        this.$router.push({
+          path: '/work/deliveryPlan',
+          query: {
+            id: row.id,
+          },
+        })
+      },
+      async fetchData(id) {
+        this.listLoading = true
+        let params = { projectId: id, pageNum: 0 }
+        const [err, res] = await to(deliverApi.getDeliverOrderList(params))
+        if (err) return (this.listLoading = false)
+        this.list = res.data.list || []
+        this.total = res.data.total
+        this.listLoading = false
+      },
+    },
+  }
+</script>

+ 8 - 1
src/views/proj/business/detail.vue

@@ -186,9 +186,12 @@
           <el-tab-pane label="合同记录" name="contract">
             <details-contract ref="detailsContract" :bus-id="id" />
           </el-tab-pane>
-          <el-tab-pane label="工单记录" name="workorder">
+          <el-tab-pane label="支持工单" name="workorder">
             <details-work-order ref="detailsWorkOrder" />
           </el-tab-pane>
+          <el-tab-pane label="交付工单" name="deliver">
+            <details-deliver ref="detailsDeliver" />
+          </el-tab-pane>
           <el-tab-pane label="归属记录" name="belong">
             <el-table v-loading="belongLoading" border :data="belongs" height="calc(100% - 42px)">
               <el-table-column align="center" label="归属销售" prop="opnContent.saleName" show-overflow-tooltip />
@@ -247,6 +250,7 @@
   import DetailsRecords from './components/DetailsRecords'
   import DetailsFollow from './components/DetailsFollow'
   import DetailsWorkOrder from './components/DetailsWorkOrder'
+  import DetailsDeliver from './components/DetailsDeliver'
   import DetailsEnclosure from './components/DetailsEnclosure'
   import WorkOrderEdit from '@/views/work/order/components/Edit'
   import ContractEdit from '@/views/contract/components/Edit'
@@ -265,6 +269,7 @@
       DetailsRecords,
       DetailsFollow,
       DetailsWorkOrder,
+      DetailsDeliver,
       DetailsEnclosure,
       WorkOrderEdit,
       ContractEdit,
@@ -359,6 +364,8 @@
           this.$refs.detailsContract.open(this.id)
         } else if (tab.name === 'workorder') {
           await this.$refs.detailsWorkOrder.open(this.details.nboCode)
+        } else if (tab.name === 'deliver') {
+          await this.$refs.detailsDeliver.open(this.details.id)
         } else if (tab.name === 'belong') {
           // 获取项目转移记录
           this.belongLoading = true