瀏覽代碼

售后服务管理 查询条件+表格字段添加

8521520123jsy 1 年之前
父節點
當前提交
76ee0ac79f

+ 48 - 101
src/views/salesServiceManagement/accessory/components/search.vue

@@ -1,116 +1,63 @@
 <!-- 搜索表单 -->
 <template>
-  <el-form
-    label-width="90px"
-    class="ele-form-search"
-    @keyup.enter.native="search"
-    @submit.native.prevent
-  >
-    <el-row :gutter="15">
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="物品名称:">
-          <el-input clearable v-model="where.code" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="领用人:">
-          <el-input clearable v-model="where.productionPlanCode" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 9, md: 12 } : { span: 9 }">
-        <el-form-item label="创建时间:">
-          <el-date-picker
-            class="w100"
-            v-model="where.createTime"
-            type="daterange"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            :default-time="['00:00:00', '23:59:59']"
-          ></el-date-picker>
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <div class="ele-form-actions">
-          <el-button type="primary" icon="el-icon-search" class="ele-btn-icon" @click="search">查询</el-button>
-          <el-button @click="reset" icon="el-icon-refresh-left" type="primary">重置</el-button>
-        </div>
-      </el-col>
-    </el-row>
-  </el-form>
+  <seekPage :seekList="seekList" :formLength="4" @search="search"></seekPage>
 </template>
-  
-  <script>
+<script>
 export default {
-  props: ['activeName', 'statusOpt', 'planType'],
   data() {
-    // 默认表单数据
-    const defaultWhere = {
-      code: '',
-      productionPlanCode: '',
-      produceVersionName: '',
-      productCode: '',
-      productName: '',
-      brandNo: '',
-      model: '',
-    //   planType: '',
-      createTime: []
-    };
-    return {
-      // 表单数据
-      deliveryVal: 'deliveryTime',
-      shapeVal: 'reqMoldTime',
-      where: { ...defaultWhere },
-      treeData: []
-    };
+    return {};
   },
+  props: {},
   computed: {
-    // 是否开启响应式布局
-    styleResponsive() {
-      return this.$store.state.theme.styleResponsive;
+    // 表格列配置
+    seekList() {
+      return [
+        {
+          label: '编码:',
+          value: 'code',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '工单编码:',
+          value: 'workCode',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '物品名称:',
+          value: 'categoryName',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '领用人:',
+          value: 'recipientName',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '客户名称:',
+          value: 'contactName',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '设备名称:',
+          value: 'deviceName',
+          type: 'input',
+          placeholder: ''
+        }
+      ];
     }
   },
-  watch: {
-    // activeName: {
-    //   handler() {
-    //     if (this.activeName) {
-    //       this.where.status = this.statusOpt[this.activeName][0].value;
-    //       this.search();
-    //     }
-    //   },
-    //   immediate: true
-    // }
-  },
-  created() {},
   methods: {
     /* 搜索 */
-    search() {
-      const where = { ...this.where };
-
-      if (where.createTime?.length) {
-        where.createTimeStart = where.createTime[0];
-        where.createTimeEnd = where.createTime[1];
-      }
-      delete where.createTime;
-
-      // where.status = where.status.split(',');
-
-      this.$emit('search', where);
-    },
-    /*  重置 */
-    reset() {
-      this.where = { ...this.defaultWhere };
-      this.search();
+    search(e) {
+      this.$emit('search', {
+        ...e
+      });
     }
   }
 };
 </script>
-  <style lang="scss" scoped>
-.ele-form-actions {
-  display: flex;
-  align-items: center;
-  justify-content: flex-end;
-}
-</style>
-  

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

@@ -1,7 +1,7 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never" v-loading="loading">
-      <!-- <search @search="reload"></search> -->
+      <search @search="reload"></search>
       <!-- 数据表格 -->
       <ele-pro-table
         ref="table"
@@ -49,7 +49,7 @@ import search from './components/search.vue';
 import accessoryDialog from './components/accessoryDialog.vue';
 import {
   accessoryPage,
-  accessoryDelete,
+  accessoryDelete
   // accessoryUpdate
 } from '@/api/salesServiceManagement/index';
 // import dictMixins from '@/mixins/dictMixins';
@@ -141,6 +141,30 @@ export default {
           align: 'center',
           showOverflowTooltip: true
         },
+        {
+          prop: 'contactName',
+          label: '客户名称',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'categoryName',
+          label: '设备名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (row) => {
+            if (!row.deviceDetails) return '';
+            let str = '';
+            row.deviceDetails.map((el, idx) => {
+              if (idx + 1 == row.deviceDetails.length) {
+                str += el.categoryName;
+              } else {
+                str = str + '' + el.categoryName + ',';
+              }
+            });
+            return str;
+          }
+        },
         {
           prop: 'createTime',
           label: '创建时间',

+ 0 - 104
src/views/salesServiceManagement/demandList/components/search.vue

@@ -1,104 +0,0 @@
-<!-- 搜索表单 -->
-<template>
-  <el-form
-    label-width="80px"
-    class="ele-form-search"
-    @keyup.enter.native="search"
-    @submit.native.prevent
-  >
-    <el-row :gutter="24">
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 5 }">
-        <el-form-item label="报修编码:">
-          <el-input clearable v-model="where.code" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 5 }">
-        <el-form-item label="报修时间:">
-          <el-date-picker
-            style="width: 100%"
-            v-model="where.time"
-            type="daterange"
-            @change="timeChange"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            :default-time="['00:00:00', '23:59:59']"
-          ></el-date-picker>
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { span: 12 } : { span: 4 }">
-        <div>
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            class="ele-btn-icon"
-            @click="search"
-            size="small"
-          >查询</el-button>
-          <el-button @click="reset" icon="el-icon-refresh-left" size="small" type="primary">重置</el-button>
-        </div>
-      </el-col>
-    </el-row>
-  </el-form>
-</template>
-  
-  <script>
-export default {
-  components: {},
-  data() {
-    // 默认表单数据
-    const defaultWhere = {
-      sourceCode: '',
-      sourceType: '',
-      code: '',
-      requestUserId: '',
-      status: '',
-      time: []
-    };
-    return {
-      // 表单数据
-      where: { ...defaultWhere }
-    };
-  },
-  computed: {
-    // 是否开启响应式布局
-    styleResponsive() {
-      return this.$store.state.theme.styleResponsive;
-    }
-  },
-  created() {},
-  methods: {
-    timeChange(value) {
-      if (!value) {
-        this.where.startTime = '';
-        this.where.endTime = '';
-      }
-    },
-    /* 搜索 */
-    search() {
-      const parmas = this.where;
-      if (parmas.time?.length) {
-        parmas.startTime = parmas.time[0];
-        parmas.endTime = parmas.time[1];
-        delete parmas.time;
-      }
-      if (parmas.status) {
-        parmas.statusList = [parmas.status].join(',');
-      } else {
-        parmas.statusList = '';
-      }
-      delete parmas.status;
-      this.$emit('search', parmas);
-    },
-    /*  重置 */
-    reset() {
-      this.where = { ...this.defaultWhere };
-      this.search();
-    }
-  }
-};
-</script>
-  <style lang="scss" scoped>
-</style>
-  

+ 6 - 7
src/views/salesServiceManagement/demandList/components/searchTable.vue

@@ -42,12 +42,12 @@ export default {
           type: 'input',
           placeholder: ''
         },
-        // {
-        //   label: '创建人:',
-        //   value: 'code',
-        //   type: 'input',
-        //   placeholder: ''
-        // },
+        {
+          label: '创建人名称:',
+          value: 'createUserName',
+          type: 'input',
+          placeholder: ''
+        },
         {
           label: '报修编码:',
           value: 'code',
@@ -84,7 +84,6 @@ export default {
   methods: {
     /* 搜索 */
     search(e) {
-      console.log('是否调用');
       this.$emit('search', {
         ...e
       });

+ 1 - 1
src/views/salesServiceManagement/demandList/index.vue

@@ -173,7 +173,7 @@ export default {
           align: 'center',
           showOverflowTooltip: true,
           formatter: (row) => {
-            return this.levelData[row.faultLevel];
+            return this.levelData[row.faultLevel] || '';
           }
         },
         {

+ 52 - 42
src/views/salesServiceManagement/recycle/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never" v-loading="loading">
-      <!-- <search @search="reload"></search> -->
+      <search @search="reload"></search>
       <!-- 数据表格 -->
       <ele-pro-table
         ref="table"
@@ -50,11 +50,11 @@
     
     <script>
 import recycleDialog from './component/recycleDialog.vue';
-// import search from './components/search.vue';
+import search from '@/views/salesServiceManagement/accessory/components/search.vue';
 import { recyclePage, recycleDelete } from '@/api/salesServiceManagement/index';
 export default {
   components: {
-    // search
+    search,
     recycleDialog
   },
   data() {
@@ -88,44 +88,54 @@ export default {
           align: 'center',
           showOverflowTooltip: true
         },
-
-        // {
-        //   prop: 'categoryLevelName',
-        //   label: '物品分类',
-        //   align: 'center',
-        //   showOverflowTooltip: true,
-        //   formatter: (row) => {
-        //     if (!row.details) return '';
-        //     let str = '';
-        //     row.details.map((el, idx) => {
-        //       if (idx + 1 == row.details.length) {
-        //         str += el.categoryLevelName;
-        //       } else {
-        //         str = str + '' + el.categoryLevelName + ',';
-        //       }
-        //     });
-        //     return str;
-        //   }
-        // },
-        // + +关键字
-        // {
-        //   prop: 'categoryName',
-        //   label: '物品名称',
-        //   align: 'center',
-        //   showOverflowTooltip: true,
-        //   formatter: (row) => {
-        //     if (!row.details) return '';
-        //     let str = '';
-        //     row.details.map((el, idx) => {
-        //       if (idx + 1 == row.details.length) {
-        //         str += el.categoryName;
-        //       } else {
-        //         str = str + '' + el.categoryName + ',';
-        //       }
-        //     });
-        //     return str;
-        //   }
-        // },
+        {
+          prop: 'categoryName',
+          label: '物品名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (row) => {
+            if (!row.details) return '';
+            let str = '';
+            row.details.map((el, idx) => {
+              if (idx + 1 == row.details.length) {
+                str += el.categoryName;
+              } else {
+                str = str + '' + el.categoryName + ',';
+              }
+            });
+            return str;
+          }
+        },
+        {
+          prop: 'recipientName',
+          label: '领用人',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'contactName',
+          label: '客户名称',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'categoryName',
+          label: '设备名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (row) => {
+            if (!row.deviceDetails) return '';
+            let str = '';
+            row.deviceDetails.map((el, idx) => {
+              if (idx + 1 == row.deviceDetails.length) {
+                str += el.categoryName;
+              } else {
+                str = str + '' + el.categoryName + ',';
+              }
+            });
+            return str;
+          }
+        },
         {
           prop: 'recycleDeptName',
           label: '回收部门',
@@ -166,7 +176,7 @@ export default {
   created() {},
   methods: {
     /* 表格数据源 */
-    datasource({ page, limit, where, order }) {
+    async datasource({ page, limit, where, order }) {
       return recyclePage({ pageNum: page, size: limit, ...where });
     },
     /* 刷新表格 */

+ 67 - 53
src/views/salesServiceManagement/toDoList/components/plan-search.vue

@@ -1,71 +1,85 @@
 <!-- 搜索表单 -->
 <template>
-  <el-form label-width="100px" class="ele-form-search" @keyup.enter.native="search" @submit.native.prevent>
-    <el-row :gutter="24">
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="计划单号:">
-          <el-input clearable v-model="where.planCode" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="计划名称:">
-          <el-input clearable v-model="where.planName" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col class="ele-form-actions" v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-button type="primary" icon="el-icon-search" class="ele-btn-icon" @click="search" size="small">
-          查询
-        </el-button>
-        <el-button @click="reset" icon="el-icon-refresh-left" size="small" type="primary">重置</el-button>
-      </el-col>
-    </el-row>
-  </el-form>
+  <seekPage :seekList="seekList" :formLength="4" @search="search"></seekPage>
 </template>
-
 <script>
 export default {
-  components: {},
   data() {
-    // 默认表单数据
-    const defaultWhere = {
-      planName: '',
-      planCode: '',
-    };
     return {
-      // 表单数据
-      where: { ...defaultWhere },
+      stateList: [
+        {
+          label: '待派单',
+          value: '0'
+        },
+        {
+          label: '已派单',
+          value: 1
+        },
+        {
+          label: '执行中',
+          value: 2
+        },
+        {
+          label: '已完成',
+          value: 3
+        },
+        {
+          label: '已撤回',
+          value: 4
+        },
+        {
+          label: '已驳回',
+          value: 5
+        }
+      ]
     };
   },
+  props: {},
   computed: {
-    // 是否开启响应式布局
-    styleResponsive() {
-      return this.$store.state.theme.styleResponsive;
+    // 表格列配置
+    seekList() {
+      return [
+        {
+          label: '计划单号:',
+          value: 'planCode',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '计划名称:',
+          value: 'planName',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '客户名称:',
+          value: 'contactName',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '设备名称:',
+          value: 'deviceName',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '状态:',
+          value: 'planStatus',
+          type: 'select',
+          planList: this.stateList,
+          placeholder: ''
+        }
+      ];
     }
   },
-  created() { },
   methods: {
     /* 搜索 */
-    search() {
-      this.$emit('search');
-    },
-    /*  重置 */
-    reset() {
-      this.where = { ...this.defaultWhere };
-      this.search();
+    search(e) {
+      this.$emit('search', {
+        ...e
+      });
     }
   }
 };
 </script>
-<style lang="scss" scoped>
-.ele-form-actions {
-  // display: flex;
-  // align-items: center;
-  // justify-content: flex-end;
-}
-
-::v-deep {
-  .el-range-editor--medium.el-input__inner {
-    width: 100%;
-  }
-}
-</style>

+ 227 - 220
src/views/salesServiceManagement/toDoList/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never" v-loading="loading">
-      <plan-search @search="reload"> </plan-search>
+      <plan-search @search="reload"></plan-search>
       <!-- 数据表格 -->
       <ele-pro-table
         ref="table"
@@ -10,13 +10,10 @@
         cache-key="systemRoleTable"
         :pageSize="20"
       >
-
         <!-- 表头工具栏 -->
-        <template v-slot:toolbar> </template>
-        <template v-slot:code="{ row }"
-          ><el-link type="primary" :underline="false" @click="goDetail(row,'view')">
-            {{ row.code }}
-          </el-link>
+        <template v-slot:toolbar></template>
+        <template v-slot:code="{ row }">
+          <el-link type="primary" :underline="false" @click="goDetail(row,'view')">{{ row.code }}</el-link>
         </template>
         <!-- 操作列 -->
         <template v-slot:action="{ row }">
@@ -25,9 +22,7 @@
             :underline="false"
             @click="handleUpdate(row,'edit')"
             v-if="[0, 4,5].includes(row.planStatus)"
-          >
-            修改
-          </el-link>
+          >修改</el-link>
           <el-popconfirm
             class="ele-action"
             title="确认删除这条记录吗?"
@@ -35,249 +30,261 @@
             v-if="[0, 4,5].includes(row.planStatus)"
           >
             <template v-slot:reference>
-              <el-link type="danger" :underline="false" icon="el-icon-delete">
-                删除
-              </el-link>
+              <el-link type="danger" :underline="false" icon="el-icon-delete">删除</el-link>
             </template>
           </el-popconfirm>
           <el-dropdown @command="(command) => handleCommand(command, row)">
             <span class="el-dropdown-link">
-              操作菜单<i class="el-icon-arrow-down el-icon--right"></i>
+              操作菜单
+              <i class="el-icon-arrow-down el-icon--right"></i>
             </span>
             <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item
-                command="handleRevocation"
-                v-if="row.planStatus == 1"
-                >撤回
-              </el-dropdown-item>
+              <el-dropdown-item command="handleRevocation" v-if="row.planStatus == 1">撤回</el-dropdown-item>
               <el-dropdown-item
                 command="handleDispatchOrders"
                 v-if="[0, 4,5].includes(row.planStatus)"
-                >派单
-              </el-dropdown-item>
-              <el-dropdown-item command="handleGenerate"
-                >生成报价单
-              </el-dropdown-item>
+              >派单</el-dropdown-item>
+              <el-dropdown-item command="handleGenerate">生成报价单</el-dropdown-item>
               <!-- <el-dropdown-item command="addSpareItems"
                 >申请备品备件
-              </el-dropdown-item> -->
+              </el-dropdown-item>-->
             </el-dropdown-menu>
           </el-dropdown>
         </template>
       </ele-pro-table>
     </el-card>
-    <addOrUpdateDialog
-      ref="addOrUpdateDialogRef"
-      @reload="reload"
-    ></addOrUpdateDialog>
+    <addOrUpdateDialog ref="addOrUpdateDialogRef" @reload="reload"></addOrUpdateDialog>
     <applyForSpare ref="edit" @reload="reload" />
     <generateForm ref="generateFormRef"></generateForm>
   </div>
 </template>
 
 <script>
-  import planSearch from './components/plan-search.vue';
-  import addOrUpdateDialog from './components/addOrUpdateDialog.vue';
-  import generateForm from './components/generateForm.vue';
+import planSearch from './components/plan-search.vue';
+import addOrUpdateDialog from './components/addOrUpdateDialog.vue';
+import generateForm from './components/generateForm.vue';
 
-  import applyForSpare from '../components/applyForSpare.vue';
+import applyForSpare from '../components/applyForSpare.vue';
 
-  import {
-    getSalesPlan,
-    deleteSalesPlan,
-    planRevocation
-  } from '@/api/salesServiceManagement/index';
+import {
+  getSalesPlan,
+  deleteSalesPlan,
+  planRevocation
+} from '@/api/salesServiceManagement/index';
 
-  import dictMixins from '@/mixins/dictMixins';
+import dictMixins from '@/mixins/dictMixins';
 
-  export default {
-    mixins: [dictMixins],
-    components: {
-      planSearch,
-      addOrUpdateDialog,
-      generateForm,
-      applyForSpare
-    },
-    data() {
-      return {
-        // 表格列配置
-        columns: [
-          {
-            columnKey: 'index',
-            label: '序号',
-            type: 'index',
-            width: 55,
-            align: 'center',
-            showOverflowTooltip: true,
-            fixed: 'left'
-          },
-          {
-            slot: 'code',
-            prop: 'code',
-            label: '计划单号',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'name',
-            label: '计划名称',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'isSyncBill',
-            label: '是否自动派单',
-            align: 'center',
-            showOverflowTooltip: true,
-            formatter: (item) => {
-              return {
-                0: '否',
-                1: '是'
-              }[item.isSyncBill];
-            }
-          },
-          {
-            prop: 'duration',
-            label: '预计售后时长(分钟)',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'planStatus',
-            label: '状态',
-            align: 'center',
-            showOverflowTooltip: true,
-            formatter: (item) => {
-              return {
-                0: '待派单',
-                1: '已派单',
-                2: '执行中',
-                3: '已完成',
-                4: '已撤回',
-                5: '已驳回'
-                
-              }[item.planStatus];
-            }
-          },
-          {
-            prop: 'urgent',
-            label: '紧急程度',
-            align: 'center',
-            showOverflowTooltip: true,
-            formatter: (item) => {
-              return {
-                1: '普通',
-                2: '紧急',
-                3: '重要'
-              }[item.urgent];
-            }
-          },
-          {
-            prop: 'createUserName',
-            label: '创建人',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'createTime',
-            label: '创建时间',
-            align: 'center',
-            showOverflowTooltip: true,
-            formatter: (_row, _column, cellValue) => {
-              return this.$util.toDateString(cellValue);
-            }
-          },
-          {
-            columnKey: 'action',
-            label: '操作',
-            width: 230,
-            align: 'center',
-            resizable: false,
-            slot: 'action',
-            showOverflowTooltip: true,
-            fixed: 'right'
+export default {
+  mixins: [dictMixins],
+  components: {
+    planSearch,
+    addOrUpdateDialog,
+    generateForm,
+    applyForSpare
+  },
+  data() {
+    return {
+      // 表格列配置
+      columns: [
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          slot: 'code',
+          prop: 'code',
+          label: '计划单号',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'name',
+          label: '计划名称',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'categoryName',
+          label: '设备名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (row) => {
+            if (!row.deviceDetails) return '';
+            let str = '';
+            row.deviceDetails.map((el, idx) => {
+              if (idx + 1 == row.deviceDetails.length) {
+                str += el.categoryName;
+              } else {
+                str = str + '' + el.categoryName + ',';
+              }
+            });
+            return str;
+          }
+        },
+        {
+          prop: 'contactName',
+          label: '客户名称',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'isSyncBill',
+          label: '是否自动派单',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (item) => {
+            return {
+              0: '否',
+              1: '是'
+            }[item.isSyncBill];
+          }
+        },
+        {
+          prop: 'duration',
+          label: '预计售后时长(分钟)',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'planStatus',
+          label: '状态',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (item) => {
+            return {
+              0: '待派单',
+              1: '已派单',
+              2: '执行中',
+              3: '已完成',
+              4: '已撤回',
+              5: '已驳回'
+            }[item.planStatus];
+          }
+        },
+        {
+          prop: 'urgent',
+          label: '紧急程度',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (item) => {
+            return {
+              1: '普通',
+              2: '紧急',
+              3: '重要'
+            }[item.urgent];
+          }
+        },
+        {
+          prop: 'createUserName',
+          label: '创建人',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (_row, _column, cellValue) => {
+            return this.$util.toDateString(cellValue);
           }
-        ],
-        // 加载状态
-        loading: false
-      };
+        },
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 230,
+          align: 'center',
+          resizable: false,
+          slot: 'action',
+          showOverflowTooltip: true,
+          fixed: 'right'
+        }
+      ],
+      // 加载状态
+      loading: false
+    };
+  },
+  computed: {},
+  created() {
+    this.requestDict('维修计划状态');
+  },
+  methods: {
+    /* 表格数据源 */
+    datasource({ page, limit, where, order }) {
+      return getSalesPlan({ pageNum: page, size: limit, ...where });
     },
-    computed: {},
-    created() {
-      this.requestDict('维修计划状态');
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({ page: 1, where });
     },
-    methods: {
-      /* 表格数据源 */
-      datasource({ page, limit, where, order }) {
-        return getSalesPlan({ pageNum: page, size: limit, ...where });
-      },
-      /* 刷新表格 */
-      reload(where) {
-        this.$refs.table.reload({ page: 1, where });
-      },
-      async cancel(row) {
-        const res = await deleteSalesPlan([row.id]);
-        if (res) {
-          this.$message.success('删除成功');
-          this.reload();
-        }
-      },
-      handleUpdate(row,type) {
-        this.$nextTick(() => {
-          this.$refs.addOrUpdateDialogRef.init(row, type);
-        });
-      },
-      goDetail(row) {
-        this.$nextTick(() => {
-          this.$refs.addOrUpdateDialogRef.init(row, 'view');
-        });
-      },
-      handleDispatchOrders(row) {
-        this.$nextTick(() => {
-          this.$refs.addOrUpdateDialogRef.init(row, 'view',true);
-        });
-      },
-      async handleRevocation(row) {
-        try {
-          await planRevocation([row.id]);
-          this.$message.success('撤回成功');
-          this.reload();
-        } catch (err) {
-          // this.$message.error(err)
-        }
-      },
-      addSpareItems(row) {
-        let data = JSON.parse(JSON.stringify(row));
-        this.$refs.edit.open(data, 'plan');
-      },
-      async handleGenerate(row) {
-        this.$refs.generateFormRef.open(row);
-      },
-      handleCommand(command, row) {
-        if (command === 'handleRevocation') {
-          this.handleRevocation(row);
-        }
-        if (command === 'handleDispatchOrders') {
-          this.handleDispatchOrders(row);
-        }
-        if (command === 'handleGenerate') {
-          this.handleGenerate(row);
-        }
-        if (command === 'addSpareItems') {
-          this.addSpareItems(row);
-        }
+    async cancel(row) {
+      const res = await deleteSalesPlan([row.id]);
+      if (res) {
+        this.$message.success('删除成功');
+        this.reload();
+      }
+    },
+    handleUpdate(row, type) {
+      this.$nextTick(() => {
+        this.$refs.addOrUpdateDialogRef.init(row, type);
+      });
+    },
+    goDetail(row) {
+      this.$nextTick(() => {
+        this.$refs.addOrUpdateDialogRef.init(row, 'view');
+      });
+    },
+    handleDispatchOrders(row) {
+      this.$nextTick(() => {
+        this.$refs.addOrUpdateDialogRef.init(row, 'view', true);
+      });
+    },
+    async handleRevocation(row) {
+      try {
+        await planRevocation([row.id]);
+        this.$message.success('撤回成功');
+        this.reload();
+      } catch (err) {
+        // this.$message.error(err)
+      }
+    },
+    addSpareItems(row) {
+      let data = JSON.parse(JSON.stringify(row));
+      this.$refs.edit.open(data, 'plan');
+    },
+    async handleGenerate(row) {
+      this.$refs.generateFormRef.open(row);
+    },
+    handleCommand(command, row) {
+      if (command === 'handleRevocation') {
+        this.handleRevocation(row);
+      }
+      if (command === 'handleDispatchOrders') {
+        this.handleDispatchOrders(row);
+      }
+      if (command === 'handleGenerate') {
+        this.handleGenerate(row);
+      }
+      if (command === 'addSpareItems') {
+        this.addSpareItems(row);
       }
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss" scoped>
-  .el-dropdown-link {
-    cursor: pointer;
-    color: var(--color-primary-5);
-  }
+.el-dropdown-link {
+  cursor: pointer;
+  color: var(--color-primary-5);
+}
 
-  .el-icon-arrow-down {
-    font-size: 12px;
-  }
+.el-icon-arrow-down {
+  font-size: 12px;
+}
 </style>

+ 41 - 55
src/views/salesServiceManagement/workOrder/components/work-search.vue

@@ -1,71 +1,57 @@
 <!-- 搜索表单 -->
 <template>
-  <el-form label-width="80px" class="ele-form-search" @keyup.enter.native="search" @submit.native.prevent>
-    <el-row :gutter="24">
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="单号:">
-          <el-input clearable v-model="where.planCode" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="">
-
-        </el-form-item>
-      </el-col> -->
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-button type="primary" icon="el-icon-search" class="ele-btn-icon" @click="search" size="small">
-          查询
-        </el-button>
-        <el-button @click="reset" icon="el-icon-refresh-left" size="small" type="primary">重置</el-button>
-      </el-col>
-    </el-row>
-  </el-form>
+  <seekPage :seekList="seekList" :formLength="4" @search="search"></seekPage>
 </template>
-
 <script>
 export default {
-  components: {},
   data() {
-    // 默认表单数据
-    const defaultWhere = {
-      planName: '',
-      planCode: '',
-    };
-    return {
-      // 表单数据
-      where: { ...defaultWhere },
-    };
+    return {};
+  },
+  props: {
+    levelList: {
+      type: Array,
+      default: () => []
+    }
   },
   computed: {
-    // 是否开启响应式布局
-    styleResponsive() {
-      return this.$store.state.theme.styleResponsive;
+    // 表格列配置
+    seekList() {
+      return [
+        {
+          label: '单号:',
+          value: 'planCode',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '客户名称:',
+          value: 'planName',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '设备名称:',
+          value: 'deviceName',
+          type: 'input',
+          placeholder: ''
+        },
+        {
+          label: '故障等级:',
+          value: 'planStatus',
+          type: 'select',
+          planList: this.levelList,
+          placeholder: ''
+        }
+      ];
     }
   },
-  created() { },
   methods: {
     /* 搜索 */
-    search() {
-      this.$emit('search');
-    },
-    /*  重置 */
-    reset() {
-      this.where = { ...this.defaultWhere };
-      this.search();
+    search(e) {
+      this.$emit('search', {
+        ...e
+      });
     }
   }
 };
 </script>
-<style lang="scss" scoped>
-.ele-form-actions {
-  // display: flex;
-  // align-items: center;
-  // justify-content: flex-end;
-}
-
-::v-deep {
-  .el-range-editor--medium.el-input__inner {
-    width: 100%;
-  }
-}
-</style>

+ 60 - 6
src/views/salesServiceManagement/workOrder/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never" v-loading="loading">
-      <work-search @search="reload"></work-search>
+      <work-search :levelList="levelList" @search="reload"></work-search>
       <!-- 数据表格 -->
       <ele-pro-table
         ref="table"
@@ -129,7 +129,7 @@ import {
   checkAndAccept,
   getSalesWorkOrderById
 } from '@/api/salesServiceManagement/index';
-
+import { getByCode } from '@/api/system/dictionary-data';
 import dictMixins from '@/mixins/dictMixins';
 export default {
   mixins: [dictMixins],
@@ -210,6 +210,42 @@ export default {
           showOverflowTooltip: true,
           minWidth: 110
         },
+        {
+          slot: 'faultLevel',
+          prop: 'faultLevel',
+          label: '故障等级',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (row) => {
+            return this.levelData[row.faultLevel] || '';
+          }
+        },
+        {
+          prop: 'contactName',
+          label: '客户名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'categoryName',
+          label: '设备名称',
+          align: 'center',
+          minWidth: 110,
+          showOverflowTooltip: true,
+          formatter: (row) => {
+            if (!row.deviceDetails) return '';
+            let str = '';
+            row.deviceDetails.map((el, idx) => {
+              if (idx + 1 == row.deviceDetails.length) {
+                str += el.categoryName;
+              } else {
+                str = str + '' + el.categoryName + ',';
+              }
+            });
+            return str;
+          }
+        },
         {
           prop: 'accepterTime',
           label: '验收时间',
@@ -256,8 +292,8 @@ export default {
           minWidth: 120,
           formatter: (row) => {
             if (row.inFactDuration || row.inFactDuration == 0) {
-             let str = ((row.inFactDuration - 0) / 60).toFixed(1);
-             return str + '  小时'
+              let str = ((row.inFactDuration - 0) / 60).toFixed(1);
+              return str + '  小时';
             }
             // if (row.finishTime && row.acceptTime) {
             //   return parseInt(
@@ -292,12 +328,30 @@ export default {
       ],
       // 加载状态
       loading: false,
-      row: {}
+      row: {},
+      levelData: {},
+      levelList: []
     };
   },
   computed: {},
-  created() {},
+  created() {
+    this.getLevelCode('fault_level');
+  },
   methods: {
+    //查询问题等级字典
+    async getLevelCode(code) {
+      const res = await getByCode(code);
+      if (res?.code === '0') {
+        let obj = {};
+        let arr = [];
+        res.data.map((el) => {
+          arr.push({ label: Object.values(el)[0], value: Object.keys(el)[0] });
+          obj = { ...obj, ...el };
+        });
+        this.levelList = arr;
+        this.levelData = obj;
+      }
+    },
     /* 表格数据源 */
     datasource({ page, limit, where, order }) {
       return getSalesWorkOrder({ pageNum: page, size: limit, ...where });