From c5f4bef2a867c3da79555a95b60a7c4d5c295f0e Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期一, 22 十二月 2025 15:18:57 +0800
Subject: [PATCH] 修改

---
 src/views/work/marketingManagement/contractManagement/contractChange/components/editDialog.vue |  513 +++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 337 insertions(+), 176 deletions(-)

diff --git a/src/views/work/marketingManagement/contractManagement/contractChange/components/editDialog.vue b/src/views/work/marketingManagement/contractManagement/contractChange/components/editDialog.vue
index c2b5902..b2a9b2f 100644
--- a/src/views/work/marketingManagement/contractManagement/contractChange/components/editDialog.vue
+++ b/src/views/work/marketingManagement/contractManagement/contractChange/components/editDialog.vue
@@ -11,7 +11,7 @@
       <el-form :model="state.form" size="default" ref="busRef" :rules="state.rules"  label-position="top" label-width="130">
         <el-row :gutter="24">
           <el-col :span="24">
-            <el-form-item label="企业名称:" prop="companyId" v-if="state.isAdmin">
+            <el-form-item label="单位名称:" prop="companyId" v-if="state.isAdmin">
               <el-select v-model="state.form.companyId" placeholder="请选择" filterable clearable style="width: 100%" :disabled="title == '查看' || title == '编辑' || !state.isAdmin" @change="selectValueCom">
                 <el-option
                     v-for="item in state.companyList"
@@ -25,7 +25,7 @@
         </el-row>
         <el-row :gutter="24">
           <el-col :span="24">
-            <el-form-item label="评审类型:" prop="year" >
+            <el-form-item label="评审类型:" prop="type" >
               <el-select clearable v-model="state.form.type" :disabled="title =='查看'" filterable>
                 <el-option
                     v-for="item in state.typeList"
@@ -39,21 +39,22 @@
         </el-row>
         <el-row :gutter="24">
           <el-col :span="8">
-            <el-form-item label="合同:" prop="year" >
-              <el-select clearable v-model="state.form.contractId" :disabled="title =='查看'" filterable>
+            <el-form-item label="合同:" prop="contractId" >
+              <el-select clearable v-model="state.form.contractId" :disabled="title =='查看'" filterable @change="changeContract">
                 <el-option
                     v-for="item in state.contractList"
                     :key="item.id"
-                    :label="item.name"
+                    :label="item.contractName"
                     :value="item.id"
                 />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="记录日期:" prop="year" >
+            <el-form-item label="记录日期:" prop="recordTime" >
               <el-date-picker
-                  v-model="state.form.fictionTime"
+                  :disabled="title =='查看'"
+                  v-model="state.form.recordTime"
                   type="date"
                   value-format="YYYY-MM-DD"
                   placeholder="请选择记录日期"
@@ -61,13 +62,13 @@
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="记录人:" prop="year">
-              <el-select clearable v-model="state.form.personId" :disabled="title =='查看'" filterable  style="width: 240px;margin-bottom: 5px">
+            <el-form-item label="记录人:" prop="registrantId">
+              <el-select clearable v-model="state.form.registrantId" :disabled="title =='查看'" filterable  style="width: 240px;margin-bottom: 5px" @change="changeRegistrant">
                 <el-option
                     v-for="item in state.peopleList"
-                    :key="item.id"
+                    :key="item.userId"
                     :label="item.name"
-                    :value="item.id"
+                    :value="item.userId"
                 />
               </el-select>
             </el-form-item>
@@ -80,24 +81,24 @@
         </el-row>
         <el-row :gutter="24">
           <el-col :span="8">
-            <el-form-item label="名称:" prop="year" >
-              <el-input  :disabled="title === '查看'"  v-model="state.form.name" placeholder="名称"></el-input>
+            <el-form-item label="名称:" prop="customerName" >
+              <el-input  :disabled="title === '查看'"  v-model="state.form.customerName" placeholder="名称"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="联系人:" prop="year" >
-              <el-input  :disabled="title === '查看'"  v-model="state.form.name" placeholder="联系人"></el-input>
+            <el-form-item label="联系人:" prop="customerUser" >
+              <el-input  :disabled="title === '查看'"  v-model="state.form.customerUser" placeholder="联系人"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="电话:" prop="year" >
-              <el-input  :disabled="title === '查看'"  v-model="state.form.name" placeholder="电话"></el-input>
+            <el-form-item label="电话:" prop="costomerPhone" >
+              <el-input  :disabled="title === '查看'"  v-model="state.form.costomerPhone" placeholder="电话"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="24">
           <el-col :span="24">
-            <el-form-item label="顾客明示的要求及用途(订货产品信息):" prop="expectContents" >
+            <el-form-item label="顾客明示的要求及用途(订货产品信息):" prop="contractReviewRequires" >
               <el-button
                   :disabled="title === '查看'"
                   type="primary"
@@ -105,40 +106,40 @@
                   style="margin-left: 10px;margin-bottom: 10px"
               >新增</el-button>
               <div style="display: flex;width: 100%;">
-                <el-table :data="state.form.expectContents" :border="true" >
+                <el-table :data="state.form.contractReviewRequires" :border="true" >
                   <el-table-column type="index" label="序号"  align="center"></el-table-column>
-                  <el-table-column label="产品名称" prop="name" align="center" width="150">
+                  <el-table-column label="产品名称" prop="name" align="center" >
                     <template  #default="{row,$index}">
-                      <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name">
-                        <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input>
+                      <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'productName'" :rules="state.rules.productName">
+                        <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.productName" placeholder="请输入"></el-input>
                       </el-form-item>
                     </template>
                   </el-table-column>
-                  <el-table-column label="规格型号" prop="name" align="center" width="150">
+                  <el-table-column label="规格型号" prop="specification" align="center" >
                     <template  #default="{row,$index}">
-                      <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name">
-                        <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input>
+                      <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'specification'" :rules="state.rules.specification">
+                        <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.specification" placeholder="请输入"></el-input>
                       </el-form-item>
                     </template>
                   </el-table-column>
-                  <el-table-column label="数量" prop="name" align="center" width="150">
+                  <el-table-column label="数量" prop="amount" align="center" >
                     <template  #default="{row,$index}">
-                      <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name">
-                        <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input>
+                      <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'amount'" :rules="state.rules.amount">
+                        <el-input style="margin-top: 10px" :disabled="title === '查看'" @input="row.amount = row.amount.replace(/[^0-9]/g,'')" type="textarea" :rows="2" v-model="row.amount" placeholder="请输入"></el-input>
                       </el-form-item>
                     </template>
                   </el-table-column>
-                  <el-table-column label="单价" prop="name" align="center" width="150">
+                  <el-table-column label="单价" prop="price" align="center" >
                     <template  #default="{row,$index}">
-                      <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name">
-                        <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input>
+                      <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'price'" :rules="state.rules.price">
+                        <el-input style="margin-top: 10px" :disabled="title === '查看'"  type="textarea" :rows="2" @input="row.price= row.price.replace(/[^\d.]/g, '') .replace(/\.+/g, '.').replace(/^\./, '0.').replace(/^(\d*\.?\d{0,2}).*/, '$1')" v-model="row.price" placeholder="请输入"></el-input>
                       </el-form-item>
                     </template>
                   </el-table-column>
-                  <el-table-column label="其他" prop="name" align="center" width="150">
+                  <el-table-column label="其他" prop="remark" align="center" >
                     <template  #default="{row,$index}">
-                      <el-form-item :prop="'expectContents.' + '[' + $index + ']' + 'name'" :rules="state.rules.name">
-                        <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.name" placeholder="请输入"></el-input>
+                      <el-form-item :prop="'contractReviewRequires.' + '[' + $index + ']' + 'remark'" :rules="state.rules.remark">
+                        <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="2" v-model="row.remark" placeholder="请输入"></el-input>
                       </el-form-item>
                     </template>
                   </el-table-column>
@@ -155,9 +156,10 @@
         </el-row>
         <el-row :gutter="24">
           <el-col :span="12">
-            <el-form-item label="交货期限:" prop="expectContents" >
+            <el-form-item label="交货期限:" prop="deliveryTime" >
               <el-date-picker
-                  v-model="state.form.fictionTime"
+                  :disabled="title =='查看'"
+                  v-model="state.form.deliveryTime"
                   type="date"
                   value-format="YYYY-MM-DD"
                   placeholder="请选择记录日期"
@@ -165,40 +167,40 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="交付方式:" prop="expectContents" >
-              <el-input  :disabled="title === '查看'"  v-model="state.form.name" placeholder="交付方式"></el-input>
+            <el-form-item label="交付方式:" prop="deliveryType" >
+              <el-input  :disabled="title === '查看'"  v-model="state.form.deliveryType" placeholder="交付方式"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="24">
           <el-col :span="12">
-            <el-form-item label="交货地址:" prop="expectContents" >
-              <el-input  :disabled="title === '查看'"  v-model="state.form.name" placeholder="交货地址"></el-input>
+            <el-form-item label="交货地址:" prop="deliveryAddr" >
+              <el-input  :disabled="title === '查看'"  v-model="state.form.deliveryAddr" placeholder="交货地址"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="付款方式:" prop="expectContents" >
-              <el-input  :disabled="title === '查看'"  v-model="state.form.name" placeholder="付款方式"></el-input>
+            <el-form-item label="付款方式:" prop="payType" >
+              <el-input  :disabled="title === '查看'"  v-model="state.form.payType" placeholder="付款方式"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="24">
           <el-col :span="24">
-            <el-form-item label="产品和服务要求及其他要求:(或变更内容):" prop="expectContents" >
-              <el-input  :disabled="title === '查看'" type="textarea" :rows="4"  v-model="state.form.name" placeholder=""></el-input>
+            <el-form-item label="产品和服务要求及其他要求:(或变更内容):" prop="productMess" >
+              <el-input  :disabled="title === '查看'" type="textarea" :rows="4"  v-model="state.form.productMess" placeholder=""></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="24">
           <el-col :span="24">
-            <el-form-item label="风险识别:" prop="expectContents" >
-              <el-input  :disabled="title === '查看'" type="textarea" :rows="4"  v-model="state.form.name" placeholder=""></el-input>
+            <el-form-item label="风险识别:" prop="riskMess" >
+              <el-input  :disabled="title === '查看'" type="textarea" :rows="4"  v-model="state.form.riskMess" placeholder=""></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="24">
           <el-col :span="24">
-            <el-form-item :label="state.form.type == 1 ? '评审内容' :'变更内容' " prop="expectContentsX" >
+            <el-form-item :label="state.form.type == 1 ? '评审内容' :state.form.type == 2?'变更内容':'内容' " prop="reviewMesses" >
               <el-button
                   :disabled="title === '查看'"
                   type="primary"
@@ -206,45 +208,62 @@
                   style="margin-left: 10px;margin-bottom: 10px"
               >新增</el-button>
               <div style="display: flex;width: 100%;">
-                <el-table :data="state.form.expectContentsX" :border="true" >
+                <el-table :data="state.form.reviewMesses" :border="true" >
                   <el-table-column type="index" label="序号"  align="center"></el-table-column>
-                  <el-table-column :label="state.form.type == 1 ? '评审部门' :'变更部门' " prop="name" align="center" width="150">
+                  <el-table-column :label="state.form.type == 1 ? '评审部门' :'变更部门' " prop="deptId" align="center" >
                     <template  #default="{row,$index}">
-                      <el-form-item :prop="'expectContentsX.' + '[' + $index + ']' + 'name'" :rules="state.rules.name">
-                        <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.name" placeholder="请输入"></el-input>
+                      <el-form-item :prop="'reviewMesses.' + '[' + $index + ']' + 'deptId'" :rules="state.rules.deptId" >
+                        <el-select
+                            :disabled="title === '查看'"
+                            v-model="row.deptId"
+                            placeholder="请选择部门"
+                            style="width: 240px"
+                            @change="changeDept"
+                        >
+                          <el-option
+                              v-for="item in state.deptList"
+                              :key="item.deptId"
+                              :label="item.deptName"
+                              :value="item.deptId"
+                          />
+                        </el-select>
                       </el-form-item>
                     </template>
                   </el-table-column>
-                  <el-table-column :label="state.form.type == 1 ? '评审内容(含风险)' :'变更内容(含风险)' " prop="need" align="center" width="150">
+                  <el-table-column :label="state.form.type == 1 ? '评审内容(含风险)' :'变更内容(含风险)' " prop="reviewMess" align="center" >
                     <template #default="{row,$index}">
-                      <div v-for="(i,index) in row.expectContentMessesX" :key="index">
-                        <el-form-item :prop="'expectContentsX.' + '[' + $index + '].' +'expectContentMessesX.' + '[' + index + ']' + '.need'" :rules="state.rules.need">
-                          <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="i.need" placeholder="请输入"></el-input>
+<!--                      <div v-for="(i,index) in row.contractReviewMessbs" :key="index">-->
+                        <el-form-item :prop="'reviewMesses.' + '[' + $index + ']' + 'reviewMess'" :rules="state.rules.reviewMess">
+                          <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.reviewMess" placeholder="请输入"></el-input>
                         </el-form-item>
-                      </div>
+<!--                      </div>-->
                     </template>
                   </el-table-column>
-                  <el-table-column :label="state.form.type == 1 ? '评审意见' :'变更意见' " prop="need" align="center" width="150">
+                  <el-table-column :label="state.form.type == 1 ? '评审意见' :'变更意见' " prop="reviewOpinion" align="center">
                     <template #default="{row,$index}">
-                      <div v-for="(i,index) in row.expectContentMessesX" :key="index">
-                        <el-form-item :prop="'expectContentsX.' + '[' + $index + '].' +'expectContentMessesX.' + '[' + index + ']' + '.need'" :rules="state.rules.need">
-                          <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="i.need" placeholder="请输入"></el-input>
+                        <el-form-item :prop="'reviewMesses.' + '[' + $index + ']' + 'reviewOpinion'" :rules="state.rules.reviewOpinion">
+                          <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="row.reviewOpinion" placeholder="请输入"></el-input>
                         </el-form-item>
-                      </div>
                     </template>
                   </el-table-column>
-                  <el-table-column label="签字" prop="need" align="center" width="150">
+                  <el-table-column label="人员" prop="reviewUser" align="center" >
                     <template #default="{row,$index}">
-                      <div v-for="(i,index) in row.expectContentMessesX" :key="index">
-                        <el-form-item :prop="'expectContentsX.' + '[' + $index + '].' +'expectContentMessesX.' + '[' + index + ']' + '.need'" :rules="state.rules.need">
-                          <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" :rows="4" v-model="i.need" placeholder="请输入"></el-input>
+                        <el-form-item :prop="'reviewMesses.' + '[' + $index + ']' + 'reviewUser'" :rules="state.rules.reviewUser">
+                          <el-select clearable v-model="row.reviewUser" :disabled="title =='查看'" filterable  style="width: 240px;margin-bottom: 5px" @change="changeReviewUser($event,$index)">
+                            <el-option
+                                v-for="item in state.peopleList"
+                                :key="item.userId"
+                                :label="item.name"
+                                :value="item.userId"
+                            />
+                          </el-select>
                         </el-form-item>
-                      </div>
+
                     </template>
                   </el-table-column>
                   <el-table-column label="操作" align="center"  v-if="title !== '查看'" >
                     <template #default="scope">
-                      <el-button link type="primary"  @click="addObject(scope.row,scope.$index)" >添加</el-button>
+<!--                      <el-button link type="primary"  @click="addObject(scope.row,scope.$index)" >添加</el-button>-->
                       <el-button link type="danger"  @click="delContent(scope.row,scope.$index)" >删除</el-button>
                     </template>
                   </el-table-column>
@@ -256,28 +275,29 @@
         </el-row>
         <el-row :gutter="24">
           <el-col :span="24">
-            <el-form-item label="审批意见:" prop="expectContents" >
-              <el-input  :disabled="title === '查看'" type="textarea" :rows="4"  v-model="state.form.name" placeholder=""></el-input>
+            <el-form-item label="审批意见:" prop="suggest" >
+              <el-input  :disabled="title === '查看'" type="textarea" :rows="4"  v-model="state.form.suggest" placeholder=""></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="24">
           <el-col :span="12">
-            <el-form-item label="法人/委托代理人签字:" prop="expectContents" >
-              <el-select clearable v-model="state.form.personId" :disabled="title =='查看'" filterable  style="width: 240px;margin-bottom: 5px">
+            <el-form-item label="法人/委托代理人签字:" prop="legalPerson" >
+              <el-select clearable v-model="state.form.legalPerson" :disabled="title =='查看'" filterable  style="width: 240px;margin-bottom: 5px" @change="changeLegal">
                 <el-option
                     v-for="item in state.peopleList"
-                    :key="item.id"
+                    :key="item.userId"
                     :label="item.name"
-                    :value="item.id"
+                    :value="item.userId"
                 />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="日期:" prop="expectContents" >
+            <el-form-item label="日期:" prop="legalTime" >
               <el-date-picker
-                  v-model="state.form.fictionTime"
+                  :disabled="title =='查看'"
+                  v-model="state.form.legalTime"
                   type="date"
                   value-format="YYYY-MM-DD"
                   placeholder="请选择记录日期"
@@ -300,10 +320,19 @@
 import Cookies from "js-cookie";
 import {getCompany} from "@/api/onlineEducation/company";
 import {ElMessage} from "element-plus";
-import {getUser} from "@/api/onlineEducation/user";
+import {getEmployeeRecordList, getEmployeeRecords, getUser} from "@/api/onlineEducation/user";
 import {getDept, getObject, getObjectPage} from "@/api/qualityObjectives/object";
 import {addTable, editTable, getTargetById} from "@/api/qualityObjectives/table";
 import {addNeedDiscren, editNeedDiscren} from "@/api/need/need";
+import {addContractReview, editContractReview} from "@/api/contractChange";
+import {getCustomer} from "@/api/customerList";
+import {getLedger} from "@/api/contractLedger";
+import {verifyPhone} from "@/utils/validate";
+import {generateWordDocument} from "@/utils/exportWord";
+import PizZip from "pizzip";
+import docxtemplater from "docxtemplater";
+import axios from "axios";
+import {getToken} from "@/utils/auth";
 
 const dialogVisible = ref(false);
 const title = ref("");
@@ -312,33 +341,74 @@
 const selectPopperClass = "max-width-select";
 const emit = defineEmits(["getList"]);
 const dataRef = ref();
+const validatePhone = (rule, value, callback)=>{
+  if(value === ''){
+    callback(new Error('请输入手机号'))
+  }else{
+    if(!verifyPhone(value)){
+      callback(new Error('手机号格式有误'))
+    }else{
+      callback()
+    }
+  }
+}
 const state = reactive({
   form: {
     id: '',
     companyId: null,
-    deptId: null,
-    year: '',
-    fictionId: null,
-    checkId: null,
-    ratifyId: null,
-    fictionTime: null,
-    frequency: '',
-    expectContents:[],
-    expectContentsX: []
+    type: null,
+    contractId: null,
+    recordTime: "",
+    registrantId: null,
+    customerName: "",
+    customerUser: "",
+    costomerPhone: "",
+    deliveryTime: "",
+    deliveryAddr: "",
+    deliveryType: "",
+    payType: "",
+    productMess: "",
+    riskMess: "",
+    legalPerson: null,
+    legalTime: "",
+    suggest: '',
+    contractReviewRequires: [],
+    reviewMesses: [],
+    filePath:'',
+    fileName:'',
+    registrantName:'',
+    legalName:'',
+    number:''
   },
   rules: {
     companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
-    deptId: [{ required: true, message: '请选择部门', trigger: 'blur' }],
-    year: [{ required: true, message: '请选择年份', trigger: 'blur' }],
-    fictionId: [{ required: true, message: '请选择编制人', trigger: 'blur' }],
-    ratifyId: [{ required: true, message: '请选择批准人', trigger: 'blur' }],
-    checkId: [{ required: true, message: '请选择审核人', trigger: 'blur' }],
-    fictionTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
-    frequency: [{ required: true, message: '请输入监测频率', trigger: 'blur' }],
-    stakeholder: [{required: true, message: "", trigger: "blur"}],
-    expectation: [{required: true, message: "", trigger: "blur"}],
-    solutions: [{required: true, message: "", trigger: "blur"}],
-    expectContents:[{ required: true, message: '请填写相关方期望或要求识别表', trigger: 'blur' }],
+    type: [{ required: true, message: '请选择评审类型', trigger: 'blur' }],
+    contractId: [{ required: true, message: '请选择合同', trigger: 'blur' }],
+    recordTime: [{ required: true, message: '请选择记录日期', trigger: 'blur' }],
+    registrantId: [{ required: true, message: '请选择记录人', trigger: 'blur' }],
+    customerName: [{ required: true, message: '请输入顾客名称', trigger: 'blur' }],
+    customerUser: [{ required: true, message: '请输入联系人', trigger: 'blur' }],
+    costomerPhone: [{ required: true, validator: validatePhone, trigger: 'blur' }],
+    deliveryTime: [{ required: true, message: '请选择交货期限', trigger: 'blur' }],
+    deliveryAddr: [{ required: true, message: '请输入交货地址', trigger: 'blur' }],
+    deliveryType: [{ required: true, message: '请输入交付方式', trigger: 'blur' }],
+    payType: [{ required: true, message: '请输入付款方式', trigger: 'blur' }],
+    productMess: [{ required: true, message: '请输入产品和服务要求内容', trigger: 'blur' }],
+    riskMess: [{ required: true, message: '请输入风险识别', trigger: 'blur' }],
+    legalPerson: [{ required: true, message: '请选择法人', trigger: 'blur' }],
+    legalTime: [{ required: true, message: '请选择日期', trigger: 'blur' }],
+    // suggest: [{ required: true, message: '请输入评审意见', trigger: 'blur' }],
+    productName: [{required: true, message: "", trigger: "blur"}],
+    pecification: [{required: true, message: "", trigger: "blur"}],
+    amount: [{required: true, message: "", trigger: "blur"}],
+    price: [{required: true, message: "", trigger: "blur"}],
+    // remark: [{required: true, message: "", trigger: "blur"}],
+    deptId:[{required: true, message: "", trigger: "blur"}],
+    reviewMess:[{required: true, message: "", trigger: "blur"}],
+    // reviewOpinion:[{required: true, message: "", trigger: "blur"}],
+    reviewUser:[{required: true, message: "", trigger: "blur"}],
+    contractReviewRequires:[{ required: true, message: '请填写顾客明示的要求及用途表', trigger: 'blur' }],
+    reviewMesses:[{ required: true, message: '请填写评审/变更内容表', trigger: 'blur' }],
   },
   peopleList: [],
   isAdmin: false,
@@ -379,47 +449,10 @@
       state.form.companyName = value.companyName
     }
   }
-  await getDeptList()
+  await getContractList()
   await getPeopleList()
+  await getDeptList()
   dialogVisible.value = true;
-}
-const onSubmit = async () => {
-  console.log('state.form',state.form)
-  const valid = await busRef.value.validate();
-  if(valid){
-    if(title.value === '新增'){
-      // console.log('sta',state.form)
-      // const {id, ...data} = JSON.parse(JSON.stringify(state.form))
-      // const res = await addNeedDiscren(data)
-      // if(res.code === 200){
-      //   ElMessage({
-      //     type: 'success',
-      //     message: '新增成功'
-      //   });
-      // }else{
-      //   ElMessage.warning(res.message)
-      // }
-      // emit("getList")
-      // busRef.value.clearValidate();
-      // reset();
-      // dialogVisible.value = false;
-    }else if(title.value === '编辑'){
-      const {...data} = JSON.parse(JSON.stringify(state.form))
-      const res = await editNeedDiscren(data)
-      if(res.code === 200){
-        ElMessage({
-          type: 'success',
-          message: '编辑成功'
-        });
-      }else{
-        ElMessage.warning(res.message)
-      }
-      emit("getList")
-      busRef.value.clearValidate();
-      reset();
-      dialogVisible.value = false;
-    }
-  }
 }
 const getDeptList = async () => {
   if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
@@ -435,18 +468,115 @@
     state.deptList = res.data
   }
 }
+const onSubmit = async () => {
+  await generateAndUpload()
+  const valid = await busRef.value.validate();
+  if(valid){
+    if(title.value === '新增'){
+      console.log('sta',state.form)
+      const {id, ...data} = JSON.parse(JSON.stringify(state.form))
+      const res = await addContractReview(data)
+      if(res.code === 200){
+        ElMessage({
+          type: 'success',
+          message: '新增成功'
+        });
+      }else{
+        ElMessage.warning(res.message)
+      }
+      emit("getList")
+      busRef.value.clearValidate();
+      reset();
+      dialogVisible.value = false;
+    }else if(title.value === '编辑'){
+      const {...data} = JSON.parse(JSON.stringify(state.form))
+      data.reviewMesses.forEach(item => {
+        item.reviewId = state.form.id
+      })
+      const res = await editContractReview(data)
+      if(res.code === 200){
+        ElMessage({
+          type: 'success',
+          message: '编辑成功'
+        });
+      }else{
+        ElMessage.warning(res.message)
+      }
+      emit("getList")
+      busRef.value.clearValidate();
+      reset();
+      dialogVisible.value = false;
+    }
+  }
+}
+const templatePath = ref()
+const generateAndUpload = async () => {
+  try {
+    const data = JSON.parse(JSON.stringify(state.form))
+    data.contractReviewRequires = data.contractReviewRequires.map(item => {
+      return{
+        ...item,
+        remark: item.remark ? item.remark : ' '
+      }
+    })
+    templatePath.value = data.type == 1 ?  '/contractReviewExample.docx' : '/contractChangeExample.docx'
+    const msg = data.type == 1 ? '评审' : '变更'
+    const response = await fetch(templatePath.value) // public目录下的文件可直接通过/访问
+    if (!response.ok) {
+      throw new Error('模板文件加载失败')
+    }
+    const templateContent = await response.arrayBuffer()
+    const zip = new PizZip(templateContent)
+    const doc = new docxtemplater(zip, {
+      paragraphLoop: true,
+      linebreaks: true
+    })
+    doc.setData(data)
+    doc.render()
+    const out = doc.getZip().generate({
+      type: 'blob',
+      mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+    })
+    const file = new File([out],`合同${msg}表.docx`, {
+      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+    })
+    const formData = new FormData()
+    formData.append('file', file)
+
+    const uploadResponse = await axios.post(import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile', formData, {
+      headers: {
+        Authorization: getToken()
+      },
+    })
+      state.form.fileName = uploadResponse.data.data.originName
+      state.form.filePath = uploadResponse.data.data.path
+  } catch (error) {
+  }
+}
+const getContractList = async () => {
+  if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
+    return
+  }
+  const param = {
+    pageNum: 1,
+    pageSize: 999,
+    companyId: state.form.companyId
+  }
+  const res = await getLedger(param)
+  if(res.code === 200){
+    state.contractList = res.data.list
+  }
+}
 const getPeopleList = async ()=> {
   if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
     return
   }
   const queryParams = {
-    pageNum: 1,
-    pageSize: 9999,
     companyId: state.form.companyId
   }
-  const res = await getUser(queryParams)
+  const res = await getEmployeeRecords(queryParams)
   if(res.code == 200){
-    state.peopleList = res.data.list?res.data.list:[]
+    state.peopleList = res.data?res.data:[]
   }else{
     ElMessage.warning(res.message)
   }
@@ -462,72 +592,103 @@
   state.form = {
     id: '',
     companyId: null,
-    deptId: null,
-    year: '',
-    fictionId: null,
-    checkId: null,
-    ratifyId: null,
-    fictionTime: null,
-    frequency: '',
-    expectContents:[],
+    type: null,
+    contractId: null,
+    recordTime: "",
+    registrantId: null,
+    customerName: "",
+    customerUser: "",
+    costomerPhone: "",
+    deliveryTime: "",
+    deliveryAddr: "",
+    deliveryType: "",
+    payType: "",
+    productMess: "",
+    riskMess: "",
+    legalPerson: null,
+    legalTime: "",
+    suggest: '',
+    contractReviewRequires: [],
+    reviewMesses: [],
+    filePath:'',
+    fileName:'',
+    registrantName:'',
+    legalName:'',
+    number:''
   }
   state.companyList = []
+  state.contractList = []
 }
 
 
-
-
-
 const selectValueCom = (val) => {
-  state.form.fictionId = null
-  state.form.checkId = null
-  state.form.ratifyId = null
-  state.form.deptId = null
+  state.form.contractId = null
+  state.form.registrantId = null
+  state.form.legalPerson = null
   state.companyList.forEach(item => {
     if(item.name === val){
       state.form.companyId = item.id
     }
   })
   getDeptList()
+  getContractList()
   getPeopleList()
 }
 
-
 const addProductTable = () => {
-  state.form.expectContents.push({expectContentMesses: [{}]})
+  state.form.contractReviewRequires.push({})
 }
 const addContentTable = () => {
-  state.form.expectContentsX.push({expectContentMessesX: [{}]})
+  state.form.reviewMesses.push({})
 }
-const addObject = (val,itemIndex) => {
-  state.form.expectContentsX.forEach((item,index) => {
-    if(index == itemIndex){
-      item.expectContentMessesX.push({})
-    }
-  })
-}
+// const addObject = (val,itemIndex) => {
+//   state.form.reviewMesses.forEach((item,index) => {
+//     if(index == itemIndex){
+//       item.contractReviewMessbs.push({})
+//     }
+//   })
+// }
 const delProduct = (val,itemIndex) => {
-  state.form.expectContents.forEach((item,index) => {
+  state.form.contractReviewRequires.forEach((item,index) => {
     if(index == itemIndex){
-      if(item.expectContentMesses.length == 1){
-        state.form.expectContents.splice(index,1)
-      }else {
-        item.expectContentMesses.pop()
-      }
+      state.form.contractReviewRequires.splice(index,1)
     }
   })
 }
 const delContent = (val,itemIndex) => {
-  state.form.expectContentsX.forEach((item,index) => {
+  state.form.reviewMesses.forEach((item,index) => {
     if(index == itemIndex){
-      if(item.expectContentMessesX.length == 1){
-        state.form.expectContentsX.splice(index,1)
-      }else {
-        item.expectContentMessesX.pop()
-      }
+      state.form.reviewMesses.splice(index,1)
     }
   })
 }
+const changeRegistrant = (val) => {
+  const obj = state.peopleList.find(i => i.userId == val)
+  state.form.registrantName = obj.name
+
+}
+const changeLegal = (val) => {
+  const obj = state.peopleList.find(i => i.userId == val)
+  state.form.legalName = obj.name
+
+}
+const changeReviewUser = (val,index) => {
+  const obj = state.peopleList.find(i => i.userId == val)
+  state.form.reviewMesses[index].reviewName = obj.name
+
+}
+const changeContract = (val) => {
+  const obj = state.contractList.find(i => i.id == val)
+  state.form.number = obj.number
+
+}
+const changeDept = (val) => {
+  const obj = state.deptList.find(i => i.deptId == val)
+  state.form.deptName = obj.deptName
+}
+
+
+
 
 defineExpose({
   openDialog

--
Gitblit v1.9.2