刘洋 1 рік тому
батько
коміт
8f14760b5a

+ 25 - 1
src/mock/index.js

@@ -190,7 +190,7 @@ const menusList = [
     title: '工时管理',
     parentId: 0,
     url: '/work-hours',
-    sort: 3,
+    sort: 4,
     name: 'WorkHours',
   },
   {
@@ -225,6 +225,30 @@ const menusList = [
     sort: 3,
     name: 'WorkStatistics',
   },
+  {
+    id: 30,
+    title: '项目质量管理',
+    parentId: 0,
+    url: '/project-quality',
+    sort: 6,
+    name: 'ProjectQuality',
+  },
+  {
+    id: 31,
+    title: '项目质量管理',
+    parentId: 30,
+    url: '/project-quality/project-quality-manage',
+    sort: 1,
+    name: 'ProjectQualityManage',
+  },
+  {
+    id: 32,
+    title: '质量问题反馈',
+    parentId: 31,
+    url: '/project-quality/project-quality-manage/issues-feedback',
+    sort: 1,
+    name: 'IssuesFeedback',
+  },
 ];
 
 export const menusApi = Mock.mock('/api/getMenus', 'get', () => {

+ 9 - 1
src/router/asyncRoutes.js

@@ -3,8 +3,16 @@ import serviceUnit from './modules/serviceUnit';
 import sop from './modules/sop';
 import resourceGuard from './modules/resourceGuard';
 import workHours from './modules/workHours';
+import projectQuality from './modules/projectQuality';
 
-const asyncRoutes = [myWorkbenches, serviceUnit, sop, resourceGuard, workHours];
+const asyncRoutes = [
+  myWorkbenches,
+  serviceUnit,
+  sop,
+  resourceGuard,
+  workHours,
+  projectQuality,
+];
 export const moduleMap = asyncRoutes.reduce((obj, item) => {
   obj[item.path.slice(1)] = item.name;
   return obj;

+ 36 - 0
src/router/modules/projectQuality.js

@@ -0,0 +1,36 @@
+export default {
+  name: 'ProjectQuality',
+  path: '/project-quality',
+  redirect: '/project-quality/project-quality-manage',
+  meta: {
+    title: '项目质量管理',
+    sort: 6,
+    isModule: true,
+  },
+  children: [
+    {
+      name: 'ProjectQualityManage',
+      path: '/project-quality/project-quality-manage',
+      redirect: '/project-quality/project-quality-manage/issues-feedback',
+      meta: {
+        title: '项目质量管理',
+        sort: 1,
+        icon: 'control-platform',
+      },
+      children: [
+        {
+          name: 'IssuesFeedback',
+          path: '/project-quality/project-quality-manage/issues-feedback',
+          component: () =>
+            import(
+              '@/views/project-quality/project-quality-manage/issues-feedback/index.vue'
+            ),
+          meta: {
+            title: '质量问题反馈',
+            sort: 1,
+          },
+        },
+      ],
+    },
+  ],
+};

+ 2 - 2
src/router/modules/workHours.js

@@ -4,7 +4,7 @@ export default {
   redirect: '/work-hours/work-hours-manage',
   meta: {
     title: '工时管理',
-    sort: 4,
+    sort: 5,
     isModule: true,
   },
   children: [
@@ -15,7 +15,7 @@ export default {
       meta: {
         title: '工时管理',
         sort: 1,
-        icon: 'layers',
+        icon: 'history',
       },
       children: [
         {

+ 155 - 0
src/views/project-quality/project-quality-manage/issues-feedback/index.vue

@@ -0,0 +1,155 @@
+<template>
+  <div class="issues-feedback flex flex-col h-full">
+    <SearchForm :fields="fields" :params="params"></SearchForm>
+    <div class="flex-1 page-wrap">
+      <div class="btn-group">
+        <t-button theme="success" :disabled="!selectedRowKeys.length"
+          >作废</t-button
+        >
+      </div>
+      <t-table
+        size="small"
+        row-key="id"
+        :columns="columns"
+        :data="tableData"
+        bordered
+        :pagination="{
+          defaultCurrent: 1,
+          defaultPageSize: 10,
+          onChange,
+          total: pagination.total,
+        }"
+        :selected-row-keys="selectedRowKeys"
+        select-on-row-click
+        @select-change="selectChange"
+      >
+      </t-table>
+    </div>
+  </div>
+</template>
+
+<script setup lang="jsx" name="DispatchManage">
+import { reactive, ref } from 'vue';
+import { useRequest } from 'vue-request';
+import { getTableData } from '@/api/test';
+import useFetchTable from '@/hooks/useFetchTable';
+
+const selectedRowKeys = ref([]);
+const selectChange = (value, { selectedRowData }) => {
+  selectedRowKeys.value = value;
+};
+
+const columns = [
+  {
+    colKey: 'row-select',
+    type: 'multiple',
+    width: 50,
+    fixed: 'left',
+  },
+  { colKey: 'a', title: '质量问题编号' },
+  { colKey: 'b', title: '项目单号' },
+  { colKey: 'c', title: '客户类型' },
+  { colKey: 'd', title: '客户名称' },
+  { colKey: 'e', title: '实施产品' },
+  { colKey: 'f', title: '问题简要' },
+  { colKey: 'g', title: '责任人' },
+  { colKey: 'h', title: '问题类型' },
+  { colKey: 'i', title: '问题归因' },
+  { colKey: 'j', title: '影响度' },
+  { colKey: 'k', title: '提交人' },
+  { colKey: 'l', title: '提交时间' },
+  { colKey: 'm', title: '更新时间' },
+  { colKey: 'n', title: '流程状态' },
+  { colKey: 'o', title: '当前节点' },
+  { colKey: 'p', title: '当前负责人' },
+];
+
+const fields = ref([
+  {
+    prop: 'a',
+    label: '服务单元',
+    type: 'select',
+    labelWidth: 100,
+    colSpan: 5,
+  },
+  {
+    prop: 'b',
+    label: '责任人',
+    type: 'select',
+    labelWidth: 100,
+    colSpan: 5,
+  },
+  {
+    prop: 'c',
+    label: '问题类型',
+    type: 'select',
+    labelWidth: 100,
+    colSpan: 5,
+  },
+  {
+    prop: 'd',
+    label: '问题归因',
+    type: 'select',
+    labelWidth: 100,
+    colSpan: 5,
+  },
+  {
+    type: 'buttons',
+    colSpan: 3,
+    children: [
+      {
+        type: 'button',
+        text: '查询',
+      },
+    ],
+  },
+  {
+    prop: 'e',
+    label: '影响度',
+    type: 'select',
+    labelWidth: 100,
+    colSpan: 5,
+  },
+  {
+    prop: 'f',
+    label: '客户名称',
+    labelWidth: 100,
+    colSpan: 5,
+  },
+  {
+    prop: 'g',
+    label: '质量问题编号',
+    labelWidth: 100,
+    colSpan: 5,
+  },
+  {
+    prop: 'h',
+    label: '提交时间',
+    type: 'daterange',
+    labelWidth: 100,
+    colSpan: 9,
+  },
+]);
+const params = reactive({
+  a: '',
+  b: '',
+  c: '',
+  d: '',
+  e: '',
+  f: '',
+  g: '',
+  h: [],
+});
+
+const {
+  loading: tableLoading,
+  pagination,
+  tableData,
+  fetchData,
+  onChange,
+} = useFetchTable(getTableData);
+
+const refresh = async () => {};
+</script>
+
+<style></style>

+ 16 - 14
src/views/service-unit/dispatch/dispatch-manage/index.vue

@@ -4,7 +4,9 @@
     <div class="flex-1 page-wrap">
       <div class="btn-group">
         <t-button theme="success" @click="handleAdd">新增</t-button>
-        <t-button theme="success">作废</t-button>
+        <t-button theme="success" :disabled="!selectedRowKeys.length"
+          >作废</t-button
+        >
         <t-button
           theme="success"
           :disabled="!selectedRowKeys.length"
@@ -84,19 +86,19 @@ const columns = [
     width: 50,
     fixed: 'left',
   },
-  { colKey: 'a', title: '服务单元', width: 80 },
-  { colKey: 'b', title: '项目单号', width: 80 },
-  { colKey: 'c', title: '派单时间', width: 80 },
-  { colKey: 'd', title: '派单人', width: 70 },
-  { colKey: 'e', title: '客户类型', width: 80 },
-  { colKey: 'f', title: '客户名称', width: 80 },
-  { colKey: 'g', title: '项目名称', width: 80 },
-  { colKey: 'h', title: '实施产品', width: 80 },
-  { colKey: 'i', title: '考试开始时间', width: 140 },
-  { colKey: 'j', title: '考试结束时间', width: 140 },
-  { colKey: 'k', title: '大区经理', width: 80 },
-  { colKey: 'l', title: '提交人', width: 70 },
-  { colKey: 'm', title: '提交时间', width: 140 },
+  { colKey: 'a', title: '服务单元' },
+  { colKey: 'b', title: '项目单号' },
+  { colKey: 'c', title: '派单时间' },
+  { colKey: 'd', title: '派单人' },
+  { colKey: 'e', title: '客户类型' },
+  { colKey: 'f', title: '客户名称' },
+  { colKey: 'g', title: '项目名称' },
+  { colKey: 'h', title: '实施产品' },
+  { colKey: 'i', title: '考试开始时间' },
+  { colKey: 'j', title: '考试结束时间' },
+  { colKey: 'k', title: '大区经理' },
+  { colKey: 'l', title: '提交人' },
+  { colKey: 'm', title: '提交时间' },
   {
     title: '操作',
     colKey: 'operate',