Ver código fonte

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend-eom into dev

yusheng 11 meses atrás
pai
commit
d6880d8afd

+ 14 - 14
src/views/salesServiceManagement/accessory/components/search.vue

@@ -63,13 +63,13 @@ export default {
           type: 'input',
           placeholder: ''
         },
-        {
-          label: '物品分类:',
-          value: 'categoryLevelName',
-          width: 380,
-          type: 'input',
-          placeholder: ''
-        },
+        // {
+        //   label: '物品分类:',
+        //   value: 'categoryLevelName',
+        //   width: 380,
+        //   type: 'input',
+        //   placeholder: ''
+        // },
         {
           label: '物品名称:',
           value: 'categoryName',
@@ -77,14 +77,14 @@ export default {
           type: 'input',
           placeholder: ''
         },
-        {
-          label: '领用部门:',
-          value: 'receivingDeptName',
-          width: 380,
-          type: 'input',
-          placeholder: '',
+        // {
+        //   label: '领用部门:',
+        //   value: 'receivingDeptName',
+        //   width: 380,
+        //   type: 'input',
+        //   placeholder: '',
           
-        },
+        // },
         {
           label: '创建时间:',
           value: 'createTime',

+ 7 - 2
src/views/salesServiceManagement/accessory/index.vue

@@ -13,6 +13,7 @@
         <!-- 表头工具栏 -->
         <template v-slot:toolbar>
           <el-button
+            v-if="$hasPermission('eom:sparepartsapply:save')"
             size="small"
             type="primary"
             icon="el-icon-plus"
@@ -32,7 +33,9 @@
         <template v-slot:action="{ row }">
           <el-link
             type="primary"
-            v-if="row.source == 0"
+            v-if="
+              row.source == 0 && $hasPermission('eom:sparepartsapply:update')
+            "
             :underline="false"
             @click="openEdit(row, 'edit')"
             >修改</el-link
@@ -45,7 +48,9 @@
             >发起流程</el-link
           > -->
           <el-popconfirm
-            v-if="row.source == 0"
+            v-if="
+              row.source == 0 && $hasPermission('eom:sparepartsapply:delete')
+            "
             class="ele-action"
             title="确定要删除此配件记录吗?"
             @confirm="handleRemove(row)"

+ 518 - 222
src/views/salesServiceManagement/components/info.vue

@@ -22,6 +22,32 @@
           <el-input v-model="form.code" disabled />
         </el-form-item>
       </el-col>
+      <el-col :span="6">
+        <el-form-item
+          label="关联类型:"
+          prop="associationType"
+          :rules="{
+            required: true,
+            message: '请选择关联类型',
+            trigger: 'change'
+          }"
+        >
+          <el-select
+            style="width: 100%"
+            v-model="form.associationType"
+            placeholder="请选择"
+            @change="selectType"
+          >
+            <el-option
+              v-for="item in associationTypeList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+      </el-col>
       <el-col :span="6">
         <el-form-item
           label="需求名称:"
@@ -69,7 +95,7 @@
           />
         </el-form-item>
       </el-col>
-      <el-col :span="6">
+      <el-col :span="6" v-show="form.associationType == '1'">
         <el-form-item
           label="发货单:"
           prop="orderCode"
@@ -87,6 +113,24 @@
           />
         </el-form-item>
       </el-col>
+      <el-col :span="6" v-show="form.associationType == '2'">
+        <el-form-item
+          label="销售订单:"
+          prop="orderCode"
+          :rules="{
+            required: true,
+            message: '请选择销售订单',
+            trigger: 'change'
+          }"
+        >
+          <el-input
+            v-model="form.orderCode"
+            readonly
+            @click.native="saleorderDialogOpen"
+            placeholder="请选择"
+          />
+        </el-form-item>
+      </el-col>
       <el-col :span="6">
         <el-form-item label="客户编码:" prop="code">
           <el-input v-model="form.contractInfo.code" readonly />
@@ -146,231 +190,386 @@
         </el-form-item>
       </el-col>
     </el-row>
-    <headerTitle
-      title="售后对象"
-      style="margin-top: 10px"
-      v-if="isPurchaseNeed"
-    ></headerTitle>
-    <ele-pro-table
-      ref="tableRef3"
-      :columns="columnsDetail"
-      :datasource="form.tableList"
-      :need-page="false"
-      :toolbar="false"
-      maxHeight="300px"
-      row-key="id"
-      default-expand-all
-    >
-      <template v-slot:measureQuantity="{ row }">
-        <el-input
-          @input="totalCountChange(row, 'measureQuantity')"
-          v-model="row.measureQuantity"
-          type="number"
-          :min="1"
-          placeholder="请输入"
-          :disabled="!tableOperate"
-        ></el-input>
-      </template>
-      <template v-slot:batchNo="{ row }">
-        <el-input
-          v-model="row.batchNo"
-          placeholder="请输入"
-          :disabled="!tableOperate"
-        ></el-input>
-      </template>
-      <template v-slot:barcodes="{ row }">
-        <el-input
-          v-model="row.barcodes"
-          placeholder="请输入"
-          :disabled="!tableOperate"
-        ></el-input>
-      </template>
-      <template v-slot:shipmentDate="{ row }">
-        <el-date-picker
-          v-model="row.shipmentDate"
-          type="datetime"
-          placeholder="选择结束时间"
-          format="yyyy-MM-dd HH:mm:ss"
-          value-format="yyyy-MM-dd HH:mm:ss"
-        ></el-date-picker>
-      </template>
-      <template v-slot:expand="{ row, $index }">
-        <div
-          style="width: calc(100% - 55px); min-height: 60px; margin-left: 55px"
-          v-if="row.faultDetails && row.faultDetails.length > 0"
-        >
-          <ele-pro-table
-            :columns="faultList"
-            :datasource="row.faultDetails || []"
-            :need-page="false"
-            maxHeight="300px"
-            class="el-form-box"
-            :toolkit="[]"
+    <div class="after_sales_target" v-if="salesShow">
+      <headerTitle
+        title="售后对象"
+        style="margin-top: 10px"
+        v-if="isPurchaseNeed"
+      ></headerTitle>
+      <ele-pro-table
+        ref="tableRef3"
+        :columns="columnsDetail"
+        :datasource="form.tableList"
+        :need-page="false"
+        :toolbar="false"
+        maxHeight="300px"
+        row-key="id"
+        default-expand-all
+      >
+        <template v-slot:measureQuantity="{ row }">
+          <el-input
+            @input="totalCountChange(row, 'measureQuantity')"
+            v-model="row.measureQuantity"
+            type="number"
+            :min="1"
+            placeholder="请输入"
+            :disabled="!tableOperate"
+          ></el-input>
+        </template>
+        <template v-slot:batchNo="{ row }">
+          <el-input
+            v-model="row.batchNo"
+            placeholder="请输入"
+            :disabled="!tableOperate"
+          ></el-input>
+        </template>
+        <template v-slot:barcodes="{ row }">
+          <el-input
+            v-model="row.barcodes"
+            placeholder="请输入"
+            :disabled="!tableOperate"
+          ></el-input>
+        </template>
+        <template v-slot:shipmentDate="{ row }">
+          <el-date-picker
+            v-model="row.shipmentDate"
+            type="datetime"
+            placeholder="选择结束时间"
+            format="yyyy-MM-dd HH:mm:ss"
+            value-format="yyyy-MM-dd HH:mm:ss"
+          ></el-date-picker>
+        </template>
+        <template v-slot:expand="{ row, $index }">
+          <div
+            style="
+              width: calc(100% - 55px);
+              min-height: 60px;
+              margin-left: 55px;
+            "
+            v-if="row.faultDetails && row.faultDetails.length > 0"
           >
-            <template v-slot:type="{ row, $index: idx }">
-              <el-form-item
-                :prop="`tableList.${$index}.faultDetails.${idx}.type`"
-                :rules="{
-                  required: true,
-                  message: '请选择故障类型',
-                  trigger: 'change'
-                }"
-              >
-                <el-select
-                  v-model="row.type"
-                  :disabled="change_permission"
-                  :placeholder="`请选择`"
-                >
-                  <el-option
-                    v-for="item in typeOptions"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value"
-                  ></el-option>
-                </el-select>
-              </el-form-item>
-            </template>
-            <template v-slot:faultPhenomenon="{ row, $index: idx }">
-              <el-form-item
-                :prop="`tableList.${$index}.faultDetails.${idx}.faultPhenomenon`"
-                :rules="{
-                  required: true,
-                  message: '请输入故障现象',
-                  trigger: 'change'
-                }"
-              >
-                <el-input
-                  v-model="row.faultPhenomenon"
-                  placeholder="请输入"
-                  :disabled="change_permission"
-                ></el-input>
-              </el-form-item>
-            </template>
-            <template
-              v-slot:faultReason="{ row, $index: idx }"
-              v-if="source == '报工信息'"
+            <ele-pro-table
+              :columns="faultList"
+              :datasource="row.faultDetails || []"
+              :need-page="false"
+              maxHeight="300px"
+              class="el-form-box"
+              :toolkit="[]"
             >
-              <el-form-item
-                :prop="`tableList.${$index}.faultDetails.${idx}.faultReason`"
-                :rules="{
-                  required: true,
-                  message: '请输入故障原因',
-                  trigger: 'change'
-                }"
+              <template v-slot:type="{ row, $index: idx }">
+                <el-form-item
+                  :prop="`tableList.${$index}.faultDetails.${idx}.type`"
+                  :rules="{
+                    required: true,
+                    message: '请选择故障类型',
+                    trigger: 'change'
+                  }"
+                >
+                  <el-select
+                    v-model="row.type"
+                    :disabled="change_permission"
+                    :placeholder="`请选择`"
+                  >
+                    <el-option
+                      v-for="item in typeOptions"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </template>
+              <template v-slot:faultPhenomenon="{ row, $index: idx }">
+                <el-form-item
+                  :prop="`tableList.${$index}.faultDetails.${idx}.faultPhenomenon`"
+                  :rules="{
+                    required: true,
+                    message: '请输入故障现象',
+                    trigger: 'change'
+                  }"
+                >
+                  <el-input
+                    v-model="row.faultPhenomenon"
+                    placeholder="请输入"
+                    :disabled="change_permission"
+                  ></el-input>
+                </el-form-item>
+              </template>
+              <template
+                v-slot:faultReason="{ row, $index: idx }"
+                v-if="source == '报工信息'"
               >
+                <el-form-item
+                  :prop="`tableList.${$index}.faultDetails.${idx}.faultReason`"
+                  :rules="{
+                    required: true,
+                    message: '请输入故障原因',
+                    trigger: 'change'
+                  }"
+                >
+                  <el-input
+                    v-model="row.faultReason"
+                    placeholder="请输入"
+                    :disabled="change_permission"
+                  ></el-input>
+                </el-form-item>
+              </template>
+              <template v-slot:faultReason="{ row }" v-else>
                 <el-input
                   v-model="row.faultReason"
                   placeholder="请输入"
                   :disabled="change_permission"
                 ></el-input>
-              </el-form-item>
-            </template>
-            <template v-slot:faultReason="{ row }" v-else>
-              <el-input
-                v-model="row.faultReason"
-                placeholder="请输入"
-                :disabled="change_permission"
-              ></el-input>
-            </template>
-            <template
-              v-slot:maintenanceProcess="{ row, $index: idx }"
-              v-if="source == '报工信息'"
-            >
-              <el-form-item
-                :prop="`tableList.${$index}.faultDetails.${idx}.maintenanceProcess`"
-                :rules="{
-                  required: true,
-                  message: '请输入维修过程',
-                  trigger: 'change'
-                }"
+              </template>
+              <template
+                v-slot:maintenanceProcess="{ row, $index: idx }"
+                v-if="source == '报工信息'"
               >
+                <el-form-item
+                  :prop="`tableList.${$index}.faultDetails.${idx}.maintenanceProcess`"
+                  :rules="{
+                    required: true,
+                    message: '请输入维修过程',
+                    trigger: 'change'
+                  }"
+                >
+                  <el-input
+                    v-model="row.maintenanceProcess"
+                    placeholder="请输入"
+                    :disabled="change_permission"
+                  ></el-input>
+                </el-form-item>
+              </template>
+              <template v-slot:maintenanceProcess="{ row }" v-else>
                 <el-input
                   v-model="row.maintenanceProcess"
                   placeholder="请输入"
                   :disabled="change_permission"
                 ></el-input>
-              </el-form-item>
-            </template>
-            <template v-slot:maintenanceProcess="{ row }" v-else>
-              <el-input
-                v-model="row.maintenanceProcess"
-                placeholder="请输入"
-                :disabled="change_permission"
-              ></el-input>
-            </template>
-            <template v-slot:attachments="{ row }">
-              <fileMain v-model="row.attachments" :type="fileStr"></fileMain>
-            </template>
-            <template v-slot:imageUrl="{ row }">
-              <el-button type="primary" plain @click="seeImage(row)"
-                >拍照列表({{ imageUrleng(row) }})</el-button
+              </template>
+              <template v-slot:attachments="{ row }">
+                <fileMain v-model="row.attachments" :type="fileStr"></fileMain>
+              </template>
+              <template v-slot:imageUrl="{ row }">
+                <el-button type="primary" plain @click="seeImage(row)"
+                  >拍照列表({{ imageUrleng(row) }})</el-button
+                >
+              </template>
+              <template v-slot:action="{ row: data, $index }">
+                <el-popconfirm
+                  class="ele-action"
+                  title="确定要删除当前故障吗?"
+                  @confirm="delSon(row, $index)"
+                >
+                  <template v-slot:reference>
+                    <el-link
+                      type="danger"
+                      v-if="faultOperate(data)"
+                      :underline="false"
+                      icon="el-icon-delete"
+                      >删除</el-link
+                    >
+                  </template>
+                </el-popconfirm>
+              </template>
+
+              <template v-slot:headerType="{ column }">
+                <span class="is-required">{{ column.label }}</span>
+              </template>
+              <template v-slot:headerPhenomenon="{ column }">
+                <span class="is-required">{{ column.label }}</span>
+              </template>
+              <template
+                v-slot:headerMaintenance="{ column }"
+                v-if="source == '报工信息'"
               >
-            </template>
-            <template v-slot:action="{ row: data, $index }">
-              <el-popconfirm
-                class="ele-action"
-                title="确定要删除当前故障吗?"
-                @confirm="delSon(row, $index)"
+                <span class="is-required">{{ column.label }}</span>
+              </template>
+              <template
+                v-slot:headerFaultReason="{ column }"
+                v-if="source == '报工信息'"
               >
-                <template v-slot:reference>
-                  <el-link
-                    type="danger"
-                    v-if="faultOperate(data)"
-                    :underline="false"
-                    icon="el-icon-delete"
-                    >删除</el-link
-                  >
-                </template>
-              </el-popconfirm>
-            </template>
+                <span class="is-required">{{ column.label }}</span>
+              </template>
+            </ele-pro-table>
+          </div>
+        </template>
+        <template v-slot:useLocation="{ row, $index }">
+          <el-form-item :prop="`tableList.${$index}.useLocation`">
+            <el-input
+              v-model="row.useLocation"
+              :disabled="type == 'view'"
+            ></el-input>
+          </el-form-item>
+        </template>
+        <template v-slot:action="{ row, $index }">
+          <el-link
+            type="primary"
+            :underline="false"
+            v-if="tableOperate"
+            @click="addProblem(row)"
+            >添加故障</el-link
+          >
+          <el-link
+            type="danger"
+            :underline="false"
+            icon="el-icon-delete"
+            v-if="type != 'view'"
+            @click="del(row, $index)"
+            >删除</el-link
+          >
+        </template>
+      </ele-pro-table>
+    </div>
+    <div class="fault_infor" v-else>
+      <headerTitle title="故障信息" style="margin-top: 10px"></headerTitle>
 
-            <template v-slot:headerType="{ column }">
-              <span class="is-required">{{ column.label }}</span>
-            </template>
-            <template v-slot:headerPhenomenon="{ column }">
-              <span class="is-required">{{ column.label }}</span>
-            </template>
-            <template
-              v-slot:headerMaintenance="{ column }"
-              v-if="source == '报工信息'"
-            >
-              <span class="is-required">{{ column.label }}</span>
-            </template>
-            <template
-              v-slot:headerFaultReason="{ column }"
-              v-if="source == '报工信息'"
+      <ele-pro-table
+        :columns="faultList"
+        :datasource="form.faultDetailList"
+        :need-page="false"
+        maxHeight="300px"
+        class="el-form-box"
+        :toolkit="[]"
+      >
+        <template v-slot:toolbar>
+          <el-button type="primary" v-if="tableOperate" @click="addFaults"
+            >添加故障</el-button
+          >
+        </template>
+        <template v-slot:type="{ row, $index: idx }">
+          <el-form-item
+            :prop="`faultDetailList.${idx}.type`"
+            :rules="{
+              required: true,
+              message: '请选择故障类型',
+              trigger: 'change'
+            }"
+          >
+            <el-select
+              v-model="row.type"
+              :disabled="change_permission"
+              :placeholder="`请选择`"
             >
-              <span class="is-required">{{ column.label }}</span>
-            </template>
-          </ele-pro-table>
-        </div>
-      </template>
-      <template v-slot:useLocation="{ row, $index }">
-        <el-form-item :prop="`tableList.${$index}.useLocation`">
+              <el-option
+                v-for="item in typeOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
+        <template v-slot:faultPhenomenon="{ row, $index: idx }">
+          <el-form-item
+            :prop="`faultDetailList.${idx}.faultPhenomenon`"
+            :rules="{
+              required: true,
+              message: '请输入故障现象',
+              trigger: 'change'
+            }"
+          >
+            <el-input
+              v-model="row.faultPhenomenon"
+              placeholder="请输入"
+              :disabled="change_permission"
+            ></el-input>
+          </el-form-item>
+        </template>
+        <template
+          v-slot:faultReason="{ row, $index: idx }"
+          v-if="source == '报工信息'"
+        >
+          <el-form-item
+            :prop="`faultDetailList.${idx}.faultReason`"
+            :rules="{
+              required: true,
+              message: '请输入故障原因',
+              trigger: 'change'
+            }"
+          >
+            <el-input
+              v-model="row.faultReason"
+              placeholder="请输入"
+              :disabled="change_permission"
+            ></el-input>
+          </el-form-item>
+        </template>
+        <template v-slot:faultReason="{ row }" v-else>
           <el-input
-            v-model="row.useLocation"
-            :disabled="type == 'view'"
+            v-model="row.faultReason"
+            placeholder="请输入"
+            :disabled="change_permission"
           ></el-input>
-        </el-form-item>
-      </template>
-      <template v-slot:action="{ row, $index }">
-        <el-link
-          type="primary"
-          :underline="false"
-          v-if="tableOperate"
-          @click="addProblem(row)"
-          >添加故障</el-link
+        </template>
+        <template
+          v-slot:maintenanceProcess="{ row, $index: idx }"
+          v-if="source == '报工信息'"
         >
-        <el-link
-          type="danger"
-          :underline="false"
-          icon="el-icon-delete"
-          v-if="type != 'view'"
-          @click="del(row, $index)"
-          >删除</el-link
+          <el-form-item
+            :prop="`faultDetailList.${idx}.maintenanceProcess`"
+            :rules="{
+              required: true,
+              message: '请输入维修过程',
+              trigger: 'change'
+            }"
+          >
+            <el-input
+              v-model="row.maintenanceProcess"
+              placeholder="请输入"
+              :disabled="change_permission"
+            ></el-input>
+          </el-form-item>
+        </template>
+        <template v-slot:maintenanceProcess="{ row }" v-else>
+          <el-input
+            v-model="row.maintenanceProcess"
+            placeholder="请输入"
+            :disabled="change_permission"
+          ></el-input>
+        </template>
+        <template v-slot:attachments="{ row }">
+          <fileMain v-model="row.attachments" :type="fileStr"></fileMain>
+        </template>
+        <template v-slot:imageUrl="{ row }">
+          <el-button type="primary" plain @click="seeImage(row)"
+            >拍照列表({{ imageUrleng(row) }})</el-button
+          >
+        </template>
+        <template v-slot:action="{ row: data, $index }">
+          <el-popconfirm
+            class="ele-action"
+            title="确定要删除当前故障吗?"
+            @confirm="faultDel($index)"
+          >
+            <template v-slot:reference>
+              <el-link type="danger" :underline="false" icon="el-icon-delete"
+                >删除</el-link
+              >
+            </template>
+          </el-popconfirm>
+        </template>
+
+        <template v-slot:headerType="{ column }">
+          <span class="is-required">{{ column.label }}</span>
+        </template>
+        <template v-slot:headerPhenomenon="{ column }">
+          <span class="is-required">{{ column.label }}</span>
+        </template>
+        <template
+          v-slot:headerMaintenance="{ column }"
+          v-if="source == '报工信息'"
         >
-      </template>
-    </ele-pro-table>
+          <span class="is-required">{{ column.label }}</span>
+        </template>
+        <template
+          v-slot:headerFaultReason="{ column }"
+          v-if="source == '报工信息'"
+        >
+          <span class="is-required">{{ column.label }}</span>
+        </template>
+      </ele-pro-table>
+    </div>
     <headerTitle
       title="联系人信息"
       style="margin-top: 10px"
@@ -492,21 +691,42 @@
       ref="invoiceDialogRef"
       @changeParent="invoiceChange"
     ></invoiceDialog>
+    <SaleorderDialog ref="saleorderDialogRef" @changeParent="saleorderChange" />
   </el-form>
 </template>
 
 <script>
+  import fileMain from '@/components/addDoc/index.vue';
   import dictMixins from '@/mixins/dictMixins';
   import PhotoList from './photoList.vue';
   import { mapGetters } from 'vuex';
   import { contactDetail } from '@/api/saleManage/contact';
   import parentList from '@/views/saleManage/contact/components/parentList.vue';
   import invoiceDialog from './invoiceDialog.vue';
+  import SaleorderDialog from './saleorderDialog.vue';
   export default {
     mixins: [dictMixins],
-    components: { parentList, invoiceDialog, PhotoList },
+    components: {
+      parentList,
+      invoiceDialog,
+      PhotoList,
+      SaleorderDialog,
+      fileMain
+    },
     computed: {
       ...mapGetters(['getDictValue']),
+      salesShow() {
+        if (this.form.associationType == '1') {
+          return true;
+        }
+        if (this.form.tableList.length > 0) {
+          return true;
+        }
+        if (this.form.associationType == '2' && this.isOrder == false) {
+          return true;
+        }
+        return false;
+      },
       bankColumns() {
         return [
           {
@@ -711,7 +931,7 @@
             headerSlot: 'headerPhenomenon',
             label: '故障现象',
             align: 'center',
-            width: 240
+            minWidth: 240
           },
           {
             prop: 'faultReason',
@@ -719,7 +939,7 @@
             headerSlot: 'headerFaultReason',
             label: '故障原因',
             align: 'center',
-            width: 340
+            minWidth: 340
           },
           {
             prop: 'maintenanceProcess',
@@ -861,18 +1081,32 @@
         form: {
           contractInfo: {},
           tableList: [],
-          contactInfoVOS: []
+          contactInfoVOS: [],
+          faultDetailList: [],
+          associationType: '1'
         },
         rules: {},
         radio: null,
         phoneList: [],
-        phoneVisible: false
+        phoneVisible: false,
+        associationTypeList: [
+          {
+            value: '1',
+            label: '发货单'
+          },
+          {
+            value: '2',
+            label: '销售订单'
+          }
+        ],
+        isOrder: false // 是否为销售订单数据
       };
     },
     created() {},
     methods: {
       async init(res) {
-        this.$set(this.form, 'tableList', res.productDetail);
+        let productDetail = res.productDetail ? res.productDetail : [];
+        this.$set(this.form, 'tableList', productDetail);
         this.$set(this.form, 'orderCode', res.orderCode);
         this.$set(this.form, 'orderId', res.orderId);
         this.$set(this.form, 'contactInfoVOS', res.contactInfoVOS);
@@ -885,6 +1119,14 @@
           this.$set(this.form, 'contactAddress', res.contactAddress);
         }
         this.contactDetail(res.contactId, 'init');
+        this.form.associationType = res.associationType
+          ? String(res.associationType)
+          : '1';
+        let faultDetailList = res.faultDetailList ? res.faultDetailList : [];
+        this.$set(this.form, 'faultDetailList', faultDetailList);
+        if (faultDetailList.length > 0) {
+          this.isOrder = true;
+        }
       },
       getValue() {
         return this.form;
@@ -941,6 +1183,18 @@
           this.$set(this.form, 'tableList', []);
         }
       },
+      //发货单回调
+      invoiceChange(data) {
+        this.$set(this.form, 'orderCode', data.orderCode);
+        this.$set(this.form, 'orderId', data.orderId);
+        let list = JSON.parse(JSON.stringify(data.tableList));
+        // 如果计量数量没有的话默认是 1
+        list.map(
+          (el) =>
+            (el.measureQuantity = el.measureQuantity ? el.measureQuantity : 1)
+        );
+        this.$set(this.form, 'tableList', list);
+      },
       //发货单选择
       invoiceDialogOpen() {
         if (!this.form?.contractInfo?.id) {
@@ -959,18 +1213,6 @@
       totalCountChange(data, name) {
         data[name] = data[name].replace(/[^\d]/g, '').replace(/^0+/, '') || '1';
       },
-      //发货单回调
-      invoiceChange(data) {
-        this.$set(this.form, 'orderCode', data.orderCode);
-        this.$set(this.form, 'orderId', data.orderId);
-        let list = JSON.parse(JSON.stringify(data.tableList));
-        // 如果计量数量没有的话默认是 1
-        list.map(
-          (el) =>
-            (el.measureQuantity = el.measureQuantity ? el.measureQuantity : 1)
-        );
-        this.$set(this.form, 'tableList', list);
-      },
       addBank() {
         this.form.contactInfoVOS.push({
           contactName: '',
@@ -1040,6 +1282,60 @@
           orderId: ''
         };
         this.$refs.form.resetFields();
+      },
+
+      // 销售订单选择
+      saleorderDialogOpen() {
+        if (!this.form?.contractInfo?.id) {
+          this.$message.warning('请先选择客户!');
+          return;
+        }
+        if (this.type != 'view') {
+          let obj = {
+            tableList: this.form.tableList || [],
+            orderCode: this.form.orderCode || '',
+            orderId: this.form.orderId || ''
+          };
+          this.$refs.saleorderDialogRef.open(this.form.contractInfo.id, obj);
+        }
+      },
+      //  销售订单回调
+      saleorderChange(data) {
+        this.$set(this.form, 'orderCode', data.orderCode);
+        this.$set(this.form, 'orderId', data.orderId);
+        let list = JSON.parse(JSON.stringify(data.tableList));
+        // 如果计量数量没有的话默认是 1
+        list.map(
+          (el) =>
+            (el.measureQuantity = el.measureQuantity ? el.measureQuantity : 1)
+        );
+        this.$set(this.form, 'tableList', list);
+        if (list.length == 0) {
+          this.isOrder = true;
+        } else {
+          this.$set(this.form, 'faultDetailList', []);
+        }
+      },
+      // 新增故障 一级( 没有售后对象 )
+      addFaults() {
+        this.form.faultDetailList.push({
+          maintenanceProcess: '',
+          type: '',
+          faultPhenomenon: ''
+        });
+      },
+
+      faultDel(index) {
+        this.form.faultDetailList.splice(index, 1);
+      },
+      selectType(e) {
+        this.$set(this.form, 'tableList', []);
+        this.$set(this.form, 'faultDetailList', []);
+        this.$set(this.form, 'orderCode', '');
+        this.$set(this.form, 'orderId', '');
+        if (e == '1') {
+          this.isOrder = false;
+        }
       }
     }
   };

+ 396 - 0
src/views/salesServiceManagement/components/saleorderDialog.vue

@@ -0,0 +1,396 @@
+<template>
+  <ele-modal
+    custom-class="ele-dialog-form long-dialog-form"
+    :centered="true"
+    :visible.sync="addRepairNotesDialog"
+    title="销售订单"
+    :close-on-click-modal="false"
+    width="85%"
+    append-to-body
+    @close="handleClose"
+    :maxable="true"
+  >
+    <div class="main_container">
+      <el-form
+        :model="searchForm"
+        label-width="120px"
+        @keyup.enter.native="onSearch"
+        @submit.native.prevent
+      >
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="销售订单编码:">
+              <el-input
+                style="width: 100%"
+                type="text"
+                clearable
+                placeholder="请输入"
+                v-model="searchForm.orderNo"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="客户名称:">
+              <el-input
+                style="width: 100%"
+                type="text"
+                clearable
+                placeholder="请输入"
+                v-model="searchForm.contactName"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="创建时间:">
+              <el-date-picker
+                style="width: 100%"
+                v-model="searchForm.time"
+                type="datetimerange"
+                start-placeholder="开始日期"
+                end-placeholder="结束日期"
+                :default-time="['00:00:00']"
+                value-format="yyyy-MM-dd HH:mm:ss"
+              ></el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="16">
+            <el-form-item>
+              <el-button
+                size="small"
+                type="primary"
+                icon="el-icon-search"
+                class="ele-btn-icon"
+                @click="onSearch"
+                >查询</el-button
+              >
+
+              <el-button
+                @click="reset"
+                icon="el-icon-refresh"
+                class="ele-btn-icon"
+                size="medium"
+                >重置</el-button
+              >
+              <slot></slot>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <headerTitle title="销售订单" style="margin-top: 8px"></headerTitle>
+      <ele-pro-table
+        ref="tableRefs2"
+        :columns="columns"
+        :datasource="datasource"
+        tool-class="ele-toolbar-form"
+        :initLoad="false"
+        height="300px"
+        highlight-current-row
+        @cell-click="rowClick"
+      ></ele-pro-table>
+      <headerTitle title="物品明细" style="margin-top: 8px"></headerTitle>
+      <ele-pro-table
+        ref="tableRef3"
+        :columns="columnsPro"
+        :datasource="packingList"
+        :need-page="false"
+        tool-class="ele-toolbar-form"
+        :selection.sync="selection"
+        height="400px"
+      ></ele-pro-table>
+    </div>
+    <div slot="footer" class="footer">
+      <el-button type="primary" @click="submitAdd">确认</el-button>
+      <el-button @click="handleClose">取消</el-button>
+    </div>
+  </ele-modal>
+</template>
+
+<script>
+  import { reviewStatus } from '@/enum/dict';
+  import {
+    getTableListHome,
+    getSaleOrderDetail
+  } from '@/api/saleManage/saleorder.js';
+
+  const dayjs = require('dayjs');
+
+  export default {
+    props: {
+      contractBookType: {
+        //合同类型 1销售 2采购
+        type: [String, Number],
+        default: 1
+      }
+    },
+    components: {},
+
+    data() {
+      return {
+        addRepairNotesDialog: false,
+        rowClickData: {},
+        selection: [],
+        packingList: [],
+        columns: [
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'orderNo',
+            label: '订单编码',
+            align: 'center',
+            slot: 'orderNo',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            prop: 'needProduce',
+            label: '订单类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 150,
+            formatter: (_row, _column, cellValue) => {
+              let businessType =
+                cellValue == 1
+                  ? '有客户生产性订单'
+                  : cellValue == 2
+                  ? '无客户生产性订单'
+                  : cellValue == 4
+                  ? '不定向订单'
+                  : '库存式订单';
+
+              return businessType;
+            }
+          },
+          {
+            prop: 'preOrderNo',
+            label: '预销售订单编码',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            prop: 'productNames',
+            label: '产品名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+          {
+            minWidth: 160,
+            prop: 'productionCodes',
+            label: '生产编号',
+            align: 'center'
+          },
+          {
+            prop: 'batchNos',
+            label: '批次号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+          {
+            prop: 'productCount',
+            label: '数量',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+          {
+            prop: 'orderStatus',
+            label: '审核状态',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100,
+            formatter: (_row, _column, cellValue) => {
+              return reviewStatus[_row.orderStatus];
+            }
+          }
+        ],
+        columnsPro: [
+          {
+            width: 45,
+            type: 'selection',
+            columnKey: 'selection',
+            align: 'center'
+          },
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'categoryName',
+            label: '名称',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'productCategoryName',
+            label: '类型',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'categoryCode',
+            label: '编码',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'productBrand',
+            label: '牌号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'categoryModel',
+            label: '型号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'packingSpecification',
+            label: '规格',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'batchNo',
+            label: '批次号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'measureQuantity',
+            label: '计量数量',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'singlePrice',
+            label: '单价(元)',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'barcodes',
+            label: '发货条码/车架号',
+            align: 'center',
+            showOverflowTooltip: true
+          }
+        ],
+        contactId: '',
+        searchForm: {}
+      };
+    },
+    created() {},
+    methods: {
+      // 初始化数据(父组件调用)
+      open(data, obj) {
+        this.contactId = data;
+        this.addRepairNotesDialog = true;
+        // 数据回显 ***
+        this.rowClickData.id = obj.orderId;
+        this.rowClickData.orderNo = obj.orderCode;
+        this.packingList = JSON.parse(JSON.stringify(obj.tableList));
+        this.$nextTick(() => {
+          this.packingList.forEach((row) => {
+            this.$refs.tableRef3.toggleRowSelection(row);
+          });
+          this.reload();
+        });
+      },
+
+      datasource({ page, limit, where, order }) {
+        return getTableListHome({
+          pageNum: page,
+          size: limit,
+          ...where
+        });
+      },
+      onSearch() {
+        let data = JSON.parse(JSON.stringify(this.searchForm));
+        if (data.time?.length > 0) {
+          data.createTimeStart = data.time[0];
+          data.createTimeEnd = data.time[1];
+        }
+        delete data.time;
+        this.reload(data);
+      },
+      reset() {
+        this.searchForm = {
+          orderNo: '',
+          contactName: '',
+          time: []
+        };
+        this.reload({});
+      },
+      reload(where) {
+        where = {
+          ...where,
+          // contractId: this.contractId,
+          contactId: this.contactId
+          // reviewStatus: 2
+        };
+        this.$refs.tableRefs2.reload({ page: 1, where });
+      },
+      async rowClick(row) {
+        this.rowClickData = { orderNo: row.orderNo, id: row.id };
+        this.getInfo(row);
+      },
+      handleClose() {
+        this.addRepairNotesDialog = false;
+        this.rowClickData = {};
+      },
+      submitAdd() {
+        // if (!this.selection.length) {
+        //   return this.$message.warning('请至少选择一条数据');
+        // }
+        if (!this.rowClickData.id){
+             return this.$message.warning('请至少选择一条销售订单数据');
+        }
+          this.$emit('changeParent', {
+            orderCode: this.rowClickData.orderNo,
+            orderId: this.rowClickData.id,
+            tableList: this.selection
+          });
+        this.handleClose();
+      },
+
+      async getInfo(row) {
+        const res = await getSaleOrderDetail(row.id);
+        let list = res.productList.map((el) => {
+          el.categoryCode = el.productCode;
+          el.categoryName = el.productName;
+          el.categoryModel = el.modelType;
+          el.measureQuantity = el.totalCount;
+          el.barcodes = el.carCode;
+          el.packingSpecification = el.specification;
+          el.shipmentDate = row.createTime || null;
+          (el.guaranteePeriodDeadline = this.getTime(row.createTime)[0]),
+            (el.warrantyStatus = this.getTime(row.createTime)[1]);
+          return el;
+        });
+        this.packingList = list;
+      },
+      getTime(createTime) {
+        let date = new Date(createTime);
+        date.setMonth(date.getMonth() + 13); // 月份加13月
+        let time = dayjs(date).format('YYYY-MM-DD HH:mm:ss');
+        let warrantyStatus =
+          new Date(time).getTime() > new Date().getTime() ? 0 : 1;
+        return [time, warrantyStatus];
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped></style>

+ 7 - 1
src/views/salesServiceManagement/demandList/components/addDialog.vue

@@ -175,8 +175,14 @@
               item['produceTime'] = item['produceTime'] || null;
               return item;
             }),
-            contactInfoVOS: data.contactInfoVOS
+            contactInfoVOS: data.contactInfoVOS,
+            associationType:data.associationType
           };
+          // 如果选的销售订单并且 没有售后对象数据
+          if(pData.associationType == '2' && pData.productDetail.length == 0){
+            delete pData.productDetail;
+            pData.faultDetailList = data.faultDetailList;
+          }
           return pData;
         } catch (err) {}
       },

+ 7 - 6
src/views/salesServiceManagement/demandList/index.vue

@@ -22,6 +22,7 @@
             icon="el-icon-plus"
             class="ele-btn-icon"
             @click="openEdit('', 'add')"
+            v-if="$hasPermission('eom:aftersalesdemand:save')"
             >新建</el-button
           >
         </template>
@@ -33,18 +34,18 @@
             @click="openEdit(row, 'view')"
             >{{ row.code }}</el-link
           >
-        </template>
+        </template> 
         <!-- 操作列 -->
         <template v-slot:action="{ row }">
           <el-link
             type="primary"
             :underline="false"
             @click="openEdit(row, 'edit')"
-            v-if="btnShow(row)"
+            v-if="btnShow(row) && $hasPermission('eom:aftersalesdemand:update')"
             >修改</el-link
           >
           <el-popconfirm
-            v-if="btnShow(row)"
+            v-if="btnShow(row) && $hasPermission('eom:aftersalesdemand:delete')"
             class="ele-action"
             title="确定要删除此售后需求吗?"
             @confirm="handleRemove(row)"
@@ -59,7 +60,7 @@
             type="primary"
             :underline="false"
             @click="handleCommand('handleAudit', row)"
-            v-if="btnShow(row)"
+            v-if="btnShow(row) && $hasPermission('eom:aftersalesdemand:submit')"
             >提交</el-link
           >
           <!-- <el-popconfirm
@@ -76,8 +77,8 @@
               >
             </template>
           </el-popconfirm> -->
-          <el-popconfirm
-            v-if="btnShow(row)"
+          <el-popconfirm 
+            v-if="btnShow(row) && $hasPermission('eom:aftersalesdemand:close')"
             class="ele-action"
             title="确定要关闭此售后需求吗?"
             @confirm="closeRevoke(row)"

+ 2 - 1
src/views/salesServiceManagement/knowledge/index.vue

@@ -13,6 +13,7 @@
         <!-- 表头工具栏 -->
         <template v-slot:toolbar>
           <el-button
+            v-if="$hasPermission('eom:aftersalesfaultknowledgebase:save')"
             size="small"
             type="primary"
             icon="el-icon-plus"
@@ -36,7 +37,7 @@
         <template v-slot:action="{ row }">
           <!-- v-if="!row.workId" -->
           <el-link
-            v-if="!row.workId"
+            v-if="!row.workId && $hasPermission('eom:aftersalesfaultknowledgebase:update')"
             type="primary"
             :underline="false"
             @click="openEdit(row, 'edit')"

+ 0 - 10
src/views/salesServiceManagement/recycle/component/recycleDialog.vue

@@ -139,15 +139,6 @@
           </el-form-item>
         </el-col>
       </el-row>
-      <!-- <headerTitle title="配件申请清单" style="margin-top: 15px"></headerTitle> -->
-      <!-- <spareParts
-        ref="spareCycleRef"
-        :type="type"
-        :source="type =='add' ? '配件回收':''"
-        :state="type=='add'?'可操作':''"
-        v-if="editRepairNotesDialog"
-        :detailList="detailList"
-      ></spareParts>-->
       <spareInfo
         ref="spareCycleRef"
         :types="type"
@@ -167,7 +158,6 @@
 <script>
 import spareInfo from '@/views/salesServiceManagement/accessory/components/spareInfo.vue';
 import workOrderList from '@/views/salesServiceManagement/accessory/components/workOrderList.vue';
-// import spareParts from '@/views/salesServiceManagement/components/sparePartsList.vue';
 import {
   recycleSave,
   recycleUpdate,

+ 7 - 7
src/views/salesServiceManagement/recycle/component/search.vue

@@ -63,13 +63,13 @@
             type: 'input',
             placeholder: ''
           },
-          {
-            label: '回收部门:',
-            value: 'recycleDeptName',
-            width: 380,
-            type: 'input',
-            placeholder: ''
-          },
+          // {
+          //   label: '回收部门:',
+          //   value: 'recycleDeptName',
+          //   width: 380,
+          //   type: 'input',
+          //   placeholder: ''
+          // },
           {
             label: '创建时间:',
             value: 'createTime',

+ 3 - 2
src/views/salesServiceManagement/recycle/index.vue

@@ -18,6 +18,7 @@
             icon="el-icon-plus"
             class="ele-btn-icon"
             @click="openEdit('', 'add')"
+            v-if="$hasPermission('eom:aftersalesaccessoryapply:save')"
             >新建</el-button
           >
         </template>
@@ -31,7 +32,7 @@
         </template>
         <template v-slot:action="{ row }">
           <el-link
-            v-if="row.source == 0"
+            v-if="row.source == 0 && $hasPermission('eom:aftersalesaccessoryapply:update')"
             type="primary"
             :underline="false"
             @click="openEdit(row, 'edit')"
@@ -44,7 +45,7 @@
           >
             <template v-slot:reference>
               <el-link
-                v-if="row.source == 0"
+                v-if="row.source == 0 && $hasPermission('eom:aftersalesaccessoryapply:delete')"
                 type="danger"
                 icon="el-icon-delete"
                 :underline="false"

+ 18 - 6
src/views/salesServiceManagement/toDoList/index.vue

@@ -39,15 +39,15 @@
           <el-link
             type="primary"
             :underline="false"
-            @click="handleUpdate(row, 'edit')"
-            v-if="[0, 4, 5].includes(row.planStatus)"
+            @click="handleUpdate(row, 'edit')" 
+            v-if="[0, 4, 5].includes(row.planStatus) && $hasPermission('eom:aftersalesplan:update')"
             >修改</el-link
           >
           <el-popconfirm
             class="ele-action"
             title="确认删除这条记录吗?"
             @confirm="cancel(row)"
-            v-if="[0, 4, 5].includes(row.planStatus)"
+            v-if="[0, 4, 5].includes(row.planStatus) && $hasPermission('eom:aftersalesplan:delete')"
           >
             <template v-slot:reference>
               <el-link type="danger" :underline="false" icon="el-icon-delete"
@@ -59,14 +59,14 @@
             type="primary"
             :underline="false"
             @click="handleCommand('handleRevocation', row)"
-            v-if="row.planStatus == 1"
+            v-if="row.planStatus == 1 && $hasPermission('eom:aftersalesplan:revocation')"
             >撤回</el-link
           >
           <el-link
             type="primary"
             :underline="false"
             @click="handleCommand('handleDispatchOrders', row)"
-            v-if="[0, 4, 5].includes(row.planStatus)"
+            v-if="[0, 4, 5].includes(row.planStatus) && $hasPermission('eom:aftersalesplan:sendOrder')"
             >派单</el-link
           >
         </template>
@@ -101,7 +101,7 @@
     planRevocation,
     checkByPlanId
   } from '@/api/salesServiceManagement/index';
-  import { getToken } from '@/utils/token-util';
+  // import { getToken } from '@/utils/token-util';
   import dictMixins from '@/mixins/dictMixins';
 
   export default {
@@ -152,6 +152,18 @@
             align: 'center',
             showOverflowTooltip: true
           },
+          {
+            prop: 'demandName',
+            label: '需求名称',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'demandCode',
+            label: '需求编码',
+            align: 'center',
+            showOverflowTooltip: true
+          },
           {
             prop: 'categoryName',
             label: '设备名称',

+ 10 - 10
src/views/salesServiceManagement/workOrder/index.vue

@@ -38,40 +38,40 @@
             type="primary"
             :underline="false"
             @click="declarationForm(row, 'edit')"
-            v-if="row.orderStatus == 1 || row.orderStatus == 6"
+            v-if="(row.orderStatus == 1 || row.orderStatus == 6) && $hasPermission('eom:aftersalesworkorder:update')"
             >修改</el-link
-          >
+          > 
           <el-link
             type="primary"
             :underline="false"
             @click="declarationForm(row, 'report')"
-            v-if="row.orderStatus == 1 || row.orderStatus == 6"
+            v-if="(row.orderStatus == 1 || row.orderStatus == 6) && $hasPermission('eom:aftersalesworkorder:reportWorking')"
             >报工</el-link
           >
           <el-link
             type="primary"
-            v-if="row.orderStatus == 0"
+            v-if="row.orderStatus == 0 && $hasPermission('eom:aftersalesworkorder:receive')"
             :underline="false"
             @click="handleCommand('handleReceive', row)"
             >接收</el-link
           >
           <el-link
             type="primary"
-            v-if="row.orderStatus == 0 || row.orderStatus == 1"
+            v-if="(row.orderStatus == 0 || row.orderStatus == 1) && $hasPermission('eom:aftersalesworkorder:reassignment')"
             :underline="false"
             @click="handleCommand('toRedeploy', row)"
             >转派</el-link
           >
           <el-link
             type="primary"
-            v-if="row.orderStatus == 1 || row.orderStatus == 2"
+            v-if="(row.orderStatus == 1 || row.orderStatus == 2) && $hasPermission('eom:sparepartsapply:save')"
             :underline="false"
             @click="handleCommand('addSpareItems', row)"
             >申请配件</el-link
           >
           <el-link
             type="primary"
-            v-if="acceptShow(row)"
+            v-if="acceptShow(row) && $hasPermission('eom:aftersalesworkorder:checkAndAccept')"
             :underline="false"
             @click="handleCommand('checkAndAccept', row)"
             >验收</el-link
@@ -79,7 +79,7 @@
           <!--    v-if="row.orderStatus == 4" -->
           <el-link
             type="primary"
-            v-if="evaluateShow(row)"
+            v-if="evaluateShow(row) && $hasPermission('eom:aftersalesworkorder:comment')"
             :underline="false"
             @click="handleCommand('evaluate', row)"
             >评价</el-link
@@ -317,8 +317,8 @@
             minWidth: 110
           },
           {
-            prop: '',
-            label: '费用',
+            prop: 'totalCost',
+            label: '费用( 元 )',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110