瀏覽代碼

Merge branch 'demo_' of http://123.60.19.203:8088/hitch/hitch-antd

 Conflicts:
	src/views/sb/info/modules/DetailC.vue
guarantee-lsq 3 年之前
父節點
當前提交
8b921c0f1d
共有 100 個文件被更改,包括 3339 次插入3031 次删除
  1. 1 1
      README.md
  2. 1 1
      public/index.html
  3. 1 1
      public/tui-calendar/checkJobCalendar.html
  4. 1 1
      public/tui-calendar/checkJobCalendar2.html
  5. 1 1
      public/tui-calendar/example00-basic.html
  6. 127 0
      src/api/customize/fieldTemplate.js
  7. 128 0
      src/api/customize/fieldTemplateData.js
  8. 32 0
      src/api/report/check-job.js
  9. 127 0
      src/api/sb/stopDetail.js
  10. 10 0
      src/api/sb/type.js
  11. 1 1
      src/components/GlobalFooter/GlobalFooter.vue
  12. 77 0
      src/components/SearchComponent/Search.vue
  13. 11 0
      src/components/tools/UserMenu.vue
  14. 1 1
      src/i18n/en.js
  15. 7 0
      src/layouts/BasicLayout.vue
  16. 1 1
      src/layouts/UserLayout.vue
  17. 7 72
      src/router/generator-platform-routers.js
  18. 6 2
      src/utils/dict.js
  19. 1 1
      src/utils/domUtil.js
  20. 2 1
      src/utils/install.js
  21. 1 1
      src/views/Home.vue
  22. 1 1
      src/views/Scan.vue
  23. 1 1
      src/views/activiti/flow/Flow.vue
  24. 1 1
      src/views/activiti/model/Model.vue
  25. 8 2
      src/views/big-screen/RepairScreen.vue
  26. 97 81
      src/views/check/checkjob/CheckJob.vue
  27. 1 1
      src/views/check/checkjob/modules/CheckJobSelectModal.vue
  28. 1 1
      src/views/check/checkjob/modules/CheckJobTable.vue
  29. 1 1
      src/views/check/checkjob/modules/CheckJobTableWaitDo.vue
  30. 1 1
      src/views/check/checkplan/CheckPlan.vue
  31. 1 1
      src/views/check/checkplan/modules/BaseForm.vue
  32. 1 1
      src/views/check/checkplan/modules/CheckPlanSelectModal.vue
  33. 1 1
      src/views/check/checkproject/CheckProject.vue
  34. 1 1
      src/views/check/checkproject/modules/AddForm.vue
  35. 1 1
      src/views/check/checkproject/modules/BaseForm.vue
  36. 1 1
      src/views/check/checkproject/modules/CheckProjectSelectModal.vue
  37. 4 2
      src/views/check/checkstandard/CheckStandard.vue
  38. 5 5
      src/views/check/checkstandard/modules/BaseForm.vue
  39. 1 1
      src/views/check/checkstandard/modules/CheckStandardSelectModal.vue
  40. 2 2
      src/views/check/checkstandard/modules/Detail.vue
  41. 280 0
      src/views/customize/fieldTemplate/CustomFieldTemplate.vue
  42. 285 0
      src/views/customize/fieldTemplate/modules/BaseForm.vue
  43. 37 25
      src/views/customize/fieldTemplate/modules/CustomFieldTemplateSelectModal.vue
  44. 195 0
      src/views/customize/fieldTemplate/modules/Detail.vue
  45. 35 30
      src/views/customize/fieldTemplate/modules/OptionForm.vue
  46. 309 0
      src/views/customize/fieldTemplate/modules/ParamForm.vue
  47. 280 0
      src/views/customize/fieldTemplateData/CustomFieldTemplateData.vue
  48. 154 0
      src/views/customize/fieldTemplateData/modules/BaseForm.vue
  49. 52 63
      src/views/customize/fieldTemplateData/modules/CustomFieldTemplateDataSelectModal.vue
  50. 67 0
      src/views/customize/fieldTemplateData/modules/Detail.vue
  51. 1 1
      src/views/customize/report/CustomizeReport.vue
  52. 1 1
      src/views/customize/report/modules/CustomizeReportSelectModal.vue
  53. 379 0
      src/views/dashboard/StoreReport1.vue
  54. 170 0
      src/views/dashboard/modules/DetailInStoreReport.vue
  55. 169 0
      src/views/dashboard/modules/DetailOutStoreReport.vue
  56. 1 1
      src/views/dashboard/modules/PrintInCheckJobReport.vue
  57. 1 1
      src/views/dashboard/modules/PrintInCheckJobReportWeek.vue
  58. 1 1
      src/views/dashboard/modules/PrintInRepairReport.vue
  59. 1 1
      src/views/dashboard/modules/PrintInRepairReportFee.vue
  60. 1 1
      src/views/dashboard/modules/PrintInRepairReportMttr.vue
  61. 231 0
      src/views/dashboard/modules/PrintInStoreInAndOutReport.vue
  62. 1 1
      src/views/download/DownloadModal.vue
  63. 0 16
      src/views/dz/InStoreFormDZ.vue
  64. 0 17
      src/views/dz/OutStoreFormDZ.vue
  65. 0 17
      src/views/dz/SpareBackFormDZ.vue
  66. 0 17
      src/views/dz/SparePickFormDZ.vue
  67. 0 17
      src/views/dz/TransferStoreFormDZ.vue
  68. 1 1
      src/views/fill/execute/FillExecute.vue
  69. 1 1
      src/views/fill/execute/modules/FillExecuteSelectModal.vue
  70. 1 1
      src/views/fill/gather-info/FillGatherInfo.vue
  71. 1 1
      src/views/fill/gather-info/modules/FillGatherInfoSelectModal.vue
  72. 1 1
      src/views/fill/gather/FillGather.vue
  73. 1 1
      src/views/fill/gather/modules/FillGatherSelectModal.vue
  74. 1 1
      src/views/fill/info/FillInfo.vue
  75. 1 1
      src/views/fill/info/modules/FillInfoSelectModal.vue
  76. 1 1
      src/views/fill/project-quantity/FillProjectQuantity.vue
  77. 1 1
      src/views/fill/project-quantity/modules/FillProjectQuantitySelectModal.vue
  78. 1 1
      src/views/firm/producer/FirmProducer.vue
  79. 1 1
      src/views/firm/producer/modules/FirmProducerSelectModal.vue
  80. 1 1
      src/views/firm/supplier/FirmSupplier.vue
  81. 1 1
      src/views/firm/supplier/modules/FirmSupplierSelectModal.vue
  82. 0 138
      src/views/form/BasicForm.vue
  83. 0 331
      src/views/form/advancedForm/AdvancedForm.vue
  84. 0 119
      src/views/form/advancedForm/RepositoryForm.vue
  85. 0 107
      src/views/form/advancedForm/TaskForm.vue
  86. 0 112
      src/views/form/stepForm/Step1.vue
  87. 0 110
      src/views/form/stepForm/Step2.vue
  88. 0 69
      src/views/form/stepForm/Step3.vue
  89. 0 62
      src/views/form/stepForm/StepForm.vue
  90. 0 135
      src/views/list/CardList.vue
  91. 0 50
      src/views/list/QueryList.vue
  92. 0 168
      src/views/list/StandardList.vue
  93. 0 280
      src/views/list/TableList.vue
  94. 0 67
      src/views/list/modules/CreateForm.vue
  95. 0 172
      src/views/list/modules/StepByStepModal.vue
  96. 0 79
      src/views/list/modules/TaskForm.vue
  97. 0 186
      src/views/list/search/Applications.vue
  98. 0 185
      src/views/list/search/Article.vue
  99. 0 168
      src/views/list/search/Projects.vue
  100. 0 78
      src/views/list/search/SearchLayout.vue

+ 1 - 1
README.md

@@ -1,2 +1,2 @@
-# HITACHI-antd
+# 乾元坤和-antd
 

+ 1 - 1
public/index.html

@@ -5,7 +5,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>logo.png">
-    <title>HITACHI ABB</title>
+    <title>乾元坤和</title>
     <style>#loading-mask{position:fixed;left:0;top:0;height:100%;width:100%;background:#fff;user-select:none;z-index:9999;overflow:hidden}.loading-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-100%)}.loading-dot{animation:antRotate 1.2s infinite linear;transform:rotate(45deg);position:relative;display:inline-block;font-size:64px;width:64px;height:64px;box-sizing:border-box}.loading-dot i{width:22px;height:22px;position:absolute;display:block;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.loading-dot i:nth-child(1){top:0;left:0}.loading-dot i:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.loading-dot i:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.loading-dot i:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antSpinMove{to{opacity:1}}</style>
     <!-- require cdn assets css -->
     <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>

+ 1 - 1
public/tui-calendar/checkJobCalendar.html

@@ -41,7 +41,7 @@
             </div>
         </div>
         <div class="lnb-footer">
-            © HITACHI.
+            © 乾元坤和.
         </div>
     </div>
     <div id="right">

+ 1 - 1
public/tui-calendar/checkJobCalendar2.html

@@ -35,7 +35,7 @@
             </div>
         </div>
         <div class="lnb-footer">
-            © HITACHI.
+            © 乾元坤和.
         </div>
     </div>
     <div id="right">

+ 1 - 1
public/tui-calendar/example00-basic.html

@@ -35,7 +35,7 @@
             </div>
         </div>
         <div class="lnb-footer">
-            © HITACHI.
+            © 乾元坤和.
         </div>
     </div>
     <div id="right">

+ 127 - 0
src/api/customize/fieldTemplate.js

@@ -0,0 +1,127 @@
+import { axios } from '@/utils/request'
+import { stringify } from 'qs'
+
+/**
+ * page func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function getCustomFieldTemplatePage (parameter) {
+  return axios({
+    url: '/customize/fieldTemplate/page?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * add func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function addCustomFieldTemplate (parameter) {
+  return axios({
+    url: '/customize/fieldTemplate',
+    method: 'POST',
+    headers: {
+      'Accept': 'application/json',
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    data: parameter
+  })
+}
+
+/**
+ * update func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function updateCustomFieldTemplate (parameter) {
+  return axios({
+    url: '/customize/fieldTemplate/' + parameter.id,
+    method: 'PUT',
+    data: parameter
+  })
+}
+
+/**
+ * fetch single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function fetchCustomFieldTemplate (parameter) {
+  return axios({
+    url: '/customize/fieldTemplate/' + parameter.id,
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * query list func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function queryCustomFieldTemplate (parameter) {
+  return axios({
+    url: '/customize/fieldTemplate?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * delete batch func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteCustomFieldTemplates (parameter) {
+  return axios({
+    url: '/customize/fieldTemplate',
+    method: 'DELETE',
+    data: parameter
+  })
+}
+
+/**
+ * delete single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteCustomFieldTemplate (parameter) {
+  return axios({
+    url: '/customize/fieldTemplate/' + parameter.id,
+    method: 'DELETE',
+    data: parameter
+  })
+}
+
+/**
+ * export file
+ * parameter: { }
+ * @param parameter :
+  * @returns {*}
+ */
+export function exportCustomFieldTemplate (parameter) {
+  return axios({
+    url: '/customize/fieldTemplate/export?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    responseType: 'blob'
+  })
+}

+ 128 - 0
src/api/customize/fieldTemplateData.js

@@ -0,0 +1,128 @@
+import { axios } from '@/utils/request'
+import { stringify } from 'qs'
+
+/**
+ * page func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function getCustomFieldTemplateDataPage (parameter) {
+    return axios({
+        url: '/customize/fieldTemplateData/page?' + stringify(parameter),
+        method: 'get',
+        headers: {
+            'Content-Type': 'application/json;charset=UTF-8'
+        }
+    })
+}
+
+/**
+ * add func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function addCustomFieldTemplateData (parameter) {
+    return axios({
+        url: '/customize/fieldTemplateData',
+        method: 'POST',
+        headers: {
+            'Accept': 'application/json',
+            'Content-Type': 'application/json;charset=UTF-8'
+        },
+        data: parameter
+    })
+}
+
+/**
+ * update func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function updateCustomFieldTemplateData (parameter) {
+    return axios({
+        url: '/customize/fieldTemplateData/' + parameter.id,
+        method: 'PUT',
+        data: parameter
+    })
+}
+
+/**
+ * fetch single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function fetchCustomFieldTemplateData (parameter) {
+    return axios({
+        url: '/customize/fieldTemplateData/' + parameter.id,
+        method: 'get',
+        headers: {
+            'Content-Type': 'application/json;charset=UTF-8'
+        }
+    })
+}
+
+/**
+ * query list func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function queryCustomFieldTemplateData (parameter) {
+    return axios({
+        url: '/customize/fieldTemplateData?' + stringify(parameter),
+        method: 'get',
+        headers: {
+            'Content-Type': 'application/json;charset=UTF-8'
+        }
+    })
+}
+
+/**
+ * delete batch func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteCustomFieldTemplateDatas (parameter) {
+    return axios({
+        url: '/customize/fieldTemplateData',
+        method: 'DELETE',
+        data: parameter
+    })
+}
+
+/**
+ * delete single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteCustomFieldTemplateData (parameter) {
+    return axios({
+        url: '/customize/fieldTemplateData/' + parameter.id,
+        method: 'DELETE',
+        data: parameter
+    })
+}
+
+
+/**
+ * export file
+ * parameter: { }
+ * @param parameter :
+ * @returns {*}
+ */
+export function exportCustomFieldTemplateData (parameter) {
+    return axios({
+        url: '/customize/fieldTemplateData/export?' + stringify(parameter),
+        method: 'get',
+        headers: {
+            'Content-Type': 'application/json;charset=UTF-8'
+        },
+        responseType: 'blob'
+    })
+}

+ 32 - 0
src/api/report/check-job.js

@@ -17,6 +17,16 @@ export function getMonthReport (parameter) {
   })
 }
 
+export function getStoreMonthReport (parameter) {
+  return axios({
+    url: '/report/stores?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
 /**
  * export file
  * parameter: { }
@@ -34,6 +44,17 @@ export function exportMonthReport (parameter) {
   })
 }
 
+export function exportMonthReport1 (parameter) {
+  return axios({
+    url: '/report/stores/export?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    responseType: 'blob'
+  })
+}
+
 /**
  * export file
  * parameter: { }
@@ -51,6 +72,17 @@ export function exportMonthReportMonth (parameter) {
   })
 }
 
+export function exportMonthReportMonth1 (parameter) {
+  return axios({
+    url: '/report/stores/export/in/month?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    responseType: 'blob'
+  })
+}
+
 /**
  * page func
  * parameter: { }

+ 127 - 0
src/api/sb/stopDetail.js

@@ -0,0 +1,127 @@
+import { axios } from '@/utils/request'
+import { stringify } from 'qs'
+
+/**
+ * page func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function getSbInfoStopDetailPage (parameter) {
+  return axios({
+    url: '/sb/stop-details/page?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * add func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function addSbInfoStopDetail (parameter) {
+  return axios({
+    url: '/sb/stop-details',
+    method: 'POST',
+    headers: {
+      'Accept': 'application/json',
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    data: parameter
+  })
+}
+
+/**
+ * update func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function updateSbInfoStopDetail (parameter) {
+  return axios({
+    url: '/sb/stop-details/' + parameter.id,
+    method: 'PUT',
+    data: parameter
+  })
+}
+
+/**
+ * fetch single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function fetchSbInfoStopDetail (parameter) {
+  return axios({
+    url: '/sb/stop-details/' + parameter.id,
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * query list func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function querySbInfoStopDetail (parameter) {
+  return axios({
+    url: '/sb/stop-details?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
+/**
+ * delete batch func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteSbInfoStopDetails (parameter) {
+  return axios({
+    url: '/sb/stop-details',
+    method: 'DELETE',
+    data: parameter
+  })
+}
+
+/**
+ * delete single func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function deleteSbInfoStopDetail (parameter) {
+  return axios({
+    url: '/sb/stop-details/' + parameter.id,
+    method: 'DELETE',
+    data: parameter
+  })
+}
+
+/**
+ * export file
+ * parameter: { }
+ * @param parameter :
+ * @returns {*}
+ */
+export function exportSbInfoStopDetail (parameter) {
+  return axios({
+    url: '/sb/stop-details/export?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    },
+    responseType: 'blob'
+  })
+}

+ 10 - 0
src/api/sb/type.js

@@ -142,6 +142,16 @@ export function fetchSbTypeTree (parameter) {
   })
 }
 
+export function fetchStoreTypeTree (parameter) {
+  return axios({
+    url: '/report/stores/tree?' + stringify(parameter),
+    method: 'get',
+    headers: {
+      'Content-Type': 'application/json;charset=UTF-8'
+    }
+  })
+}
+
 /**
  * page func
  * parameter: { }

+ 1 - 1
src/components/GlobalFooter/GlobalFooter.vue

@@ -16,7 +16,7 @@
     <!--    </div>
     <div class="copyright">
       Copyright
-      <a-icon type="copyright" /> 2020 <span>Hitachi出品</span>-->
+      <a-icon type="copyright" /> 2020 <span>乾元坤和出品</span>-->
       <div class="copyright">
 
             <a-icon type="copyright" /> 2020 <span>版权所有</span>

+ 77 - 0
src/components/SearchComponent/Search.vue

@@ -0,0 +1,77 @@
+<template>
+  <a-card>
+    <a-form
+      :model="searchInfo"
+      :label-col="labelCol"
+      :wrapper-col="wrapperCol"
+      layout="inline"
+    >
+      <div v-for="(item, index) in searchData" :key="index">
+        <a-form-item v-if="item.type == 'input'" :label="item.label">
+          <a-input v-model="searchInfo[item.value]" />
+        </a-form-item>
+        <a-form-item v-if="item.type == 'select'" :label="item.label">
+          <a-select
+            v-model="searchInfo[item.value]"
+            :placeholder="item.placeholder"
+            :options="item.menu"
+            style="width: 120px"
+          >
+          </a-select>
+        </a-form-item>
+        <a-form-item v-if="item.type === 'picker'" :label="item.label">
+          <a-date-picker
+            v-model:value="searchInfo[item.value]"
+            show-time
+            type="date"
+            :placeholder="item.placeholder"
+            style="width: 100%"
+          />
+        </a-form-item>
+      </div>
+      <a-form-item :wrapper-col="{ span: 14, offset: 4 }">
+        <a-button type="primary" @click="onSubmit">搜索</a-button>
+      </a-form-item>
+      <a-form-item>
+        <a-button style="margin-left: 10px">重置</a-button>
+      </a-form-item>
+    </a-form>
+  </a-card>
+</template>
+
+<script>
+export default {
+  name: 'Search',
+  props: {
+    searchInfo: {
+      type: Object,
+      default: () => ({})
+    },
+    searchData: {
+      type: Array,
+      default: () => ({})
+    }
+  },
+  setup (props: any, ctx) {
+    const searchInfo: any = reactive(props.searchInfo)
+    const searchData = reactive(props.searchData)
+    const onSubmit = () => {
+      console.log('submit!', toRaw(searchInfo))
+      ctx.emit('submit-data', toRaw(searchInfo))
+    }
+    console.log(searchInfo)
+    console.log(searchData)
+    return {
+      labelCol: { span: 4 },
+      wrapperCol: { span: 14 },
+      searchInfo,
+      onSubmit,
+      searchData
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 11 - 0
src/components/tools/UserMenu.vue

@@ -26,6 +26,17 @@
           </a-menu-item>
         </a-menu>
       </a-dropdown>-->
+      <side-menu
+        mode="inline"
+        :menus="mobileMenus"
+        :theme="navTheme"
+        :collapsed="false"
+        :collapsible="true"
+        @menuSelect="menuSelect"
+      ></side-menu>
+      <v-for>
+
+      </v-for>
       <a-dropdown>
         <span class="action ant-dropdown-link user-dropdown-menu">
           <a-avatar class="avatar" size="small" :src="avatar"/>

+ 1 - 1
src/i18n/en.js

@@ -2,7 +2,7 @@ export const m = {
   // common
   common: {
     language: 'change language',
-    welcome: 'HITACHI ABB',
+    welcome: '乾元坤和',
     login: 'Sign In',
     remember: 'Remember password',
     system_name: 'Equipment management system',

+ 7 - 0
src/layouts/BasicLayout.vue

@@ -269,4 +269,11 @@ export default {
     -webkit-transform: scale(1.1);
     transform: scale(1.1);
   }
+
+  .ant-pro-multi-tab{
+    margin-left: 0px !important;
+  }
+  .ant-tabs-bar{
+    padding-left: 0px !important;
+  }
 </style>

+ 1 - 1
src/layouts/UserLayout.vue

@@ -21,7 +21,7 @@
         <!--          <a href="_self">条款</a>-->
         <!--        </div>-->
         <div class="copyright">
-          Copyright &copy; 2020 Hitachi
+          Copyright &copy; 2020 乾元坤和
         </div>
       </div>
     </div>

+ 7 - 72
src/router/generator-platform-routers.js

@@ -17,23 +17,6 @@ const constantRouterComponents = {
   '404': () => import(/* webpackChunkName: "error" */ '@/views/exception/404'),
   '500': () => import(/* webpackChunkName: "error" */ '@/views/exception/500'),
   'IndexView': () => import(/* webpackChunkName: "error" */ '@/views/index/Index'),
-
-  // form
-  'BasicForm': () => import('@/views/form/BasicForm'),
-  'StepForm': () => import('@/views/form/stepForm/StepForm'),
-  'AdvanceForm': () => import('@/views/form/advancedForm/AdvancedForm'),
-
-  // list
-  'TableList': () => import('@/views/list/TableList'),
-  'StandardList': () => import('@/views/list/StandardList'),
-  'CardList': () => import('@/views/list/CardList'),
-  'SearchLayout': () => import('@/views/list/search/SearchLayout'),
-  'SearchArticles': () => import('@/views/list/search/Article'),
-  'SearchProjects': () => import('@/views/list/search/Projects'),
-  'SearchApplications': () => import('@/views/list/search/Applications'),
-  'ProfileBasic': () => import('@/views/profile/basic/Index'),
-  'ProfileAdvanced': () => import('@/views/profile/advanced/Advanced'),
-
   // upms
   'Dept': () => import('@/views/upms/dept/Dept'),
   'User': () => import('@/views/upms/user/User'),
@@ -58,15 +41,8 @@ const constantRouterComponents = {
   // account
   'AccountCenter': () => import('@/views/account/center/Index'),
   'AccountSettings': () => import('@/views/account/settings/Index'),
-
   // 其他组件
-  'IconSelectorView': () => import('@/views/other/IconSelectorView'),
-  'TreeList': () => import('@/views/other/TreeList'),
-  'TableInnerEditList': () => import('@/views/other/TableInnerEditList'),
-  'UserList': () => import('@/views/other/UserList'),
-  'RoleList': () => import('@/views/other/RoleList'),
   'SystemRoleList': () => import('@/views/role/RoleList'),
-  'PermissionList': () => import('@/views/other/PermissionList'),
   // 设备类型
   'SbType': () => import('@/views/sb/type/SbType'),
   // 设备位置
@@ -112,6 +88,7 @@ const constantRouterComponents = {
   'SpareStoreTotalMinStock': () => import('@/views/sqarepartmanage/sparepartinfo/SpareStoreTotalMinStock'),
   // 备件使用信息
   'SparePartUsed': () => import('@/views/sqarepartmanage/sparepartused/SparePartUsed'),
+  'SbInfoStopDetail': () => import('@/views/sb/stop-detail/SbInfoStopDetail'),
   // 点检
   'SpotCheckStandard': () => import('@/views/check/checkstandard/SpotCheckStandard'),
   'SpotCheckProject': () => import('@/views/check/checkproject/SpotCheckProject'),
@@ -195,13 +172,6 @@ const constantRouterComponents = {
   'RepairReason': () => import('@/views/repair/repair-reason/RepairReason'),
   // 生产商
   'FirmProducer': () => import('@/views/firm/producer/FirmProducer'),
-  // 报表管理
-  'MonthlySbThreeRate': () => import('@/views/monthly/sb-three-rate/MonthlySbThreeRateView'),
-  // 工作票管理
-  'Ticket': () => import('@/views/ticket/ticket/Ticket'),
-  'TicketSafe': () => import('@/views/ticket/ticketsafe/TicketSafe'),
-  'TicketExecute': () => import('@/views/ticket/ticketexecute/TicketExecute'),
-  'TicketSafeExecute': () => import('@/views/ticket/ticketsafeexecute/TicketSafeExecute'),
   // 日常管理
   'FillInfo': () => import('@/views/fill/info/FillInfo'),
   'FillGather': () => import('@/views/fill/gather/FillGather'),
@@ -232,6 +202,7 @@ const constantRouterComponents = {
   'StatisticsSparePartUsedSpare': () => import('@/views/statistics/spare/StatisticsSparePartUsedSpare'),
   'StatisticsRepairFormUser': () => import('@/views/statistics/repair/StatisticsRepairFormUserView'),
   'WorkplaceBacklog': () => import('@/views/workplace/backlog/WorkplaceBacklog'),
+  'NewWorkplaceBacklog': () => import('@/views/workplace/backlog/NewWorkplaceBacklog'),
   'Supplier': () => import('@/views/purchase/supplier/Supplier'),
   'SupplierApply': () => import('@/views/purchase/supplier/SupplierApply'),
   'PurchaseDemandPlan': () => import('@/views/purchase/purchase-demand-plan/PurchaseDemandPlan'),
@@ -256,12 +227,6 @@ const constantRouterComponents = {
   'FgsZgSbAllocateApply': () => import('@/views/sb/allocate-apply/FgsZgSbAllocateApply'),
   // 调拨审批
   'SbAllocateTaskAudit': () => import('@/views/sb/allocate-task/SbAllocateTaskAudit'),
-  'SbOilUser': () => import('@/views/sb/oil/SbOilUser'),
-  'SbOilTask': () => import('@/views/sb/oil/SbOilTask'),
-  'SbOilAudit': () => import('@/views/sb/oil/SbOilAudit'),
-  'MySbOil': () => import('@/views/sb/oil/MySbOil'),
-  'ZGSbOil': () => import('@/views/sb/oil/ZGSbOil'),
-  'AdminSbOil': () => import('@/views/sb/oil/AdminSbOil'),
   // 我的功能
   'ProjectStore': () => import('@/views/store/store/ProjectStore'),
   'CompanyStore': () => import('@/views/store/store/CompanyStore'),
@@ -313,13 +278,6 @@ const constantRouterComponents = {
   // 导入
   'Imp': () => import('@/views/upms/impExcel/Imp'),
 
-  // 低值易耗品管理
-  'InStoreFormDZ': () => import('@/views/dz/InStoreFormDZ'), // 入库登记单
-  'OutStoreFormDZ': () => import('@/views/dz/OutStoreFormDZ'), // 出库登记单
-  'TransferStoreFormDZ': () => import('@/views/dz/TransferStoreFormDZ'), // 调拨登记单
-  'SparePickFormDZ': () => import('@/views/dz/SparePickFormDZ'), // 领用登记单
-  'SpareBackFormDZ': () => import('@/views/dz/SpareBackFormDZ'), // 退库登记单
-
   // 报表
   'AnalysisSbInfo': () => import('@/views/dashboard/AnalysisSbInfo'), // 保养任务完成率报表
   'CheckJobReport': () => import('@/views/dashboard/CheckJobReport'), // 保养任务完成率报表
@@ -330,9 +288,12 @@ const constantRouterComponents = {
   'RepairReportSbInfoFee': () => import('@/views/dashboard/RepairReportSbInfoFee'), // 设备维修费用报表
   'RepairReportMttr': () => import('@/views/dashboard/RepairReportMttr'), // MTTR月统计报表
   'RepairReportFee': () => import('@/views/dashboard/RepairReportFee'), // 费用按月统计
-
+  'StoreReport1': () => import('@/views/dashboard/StoreReport1'), // 仓库报表
+  'RepairScreen': () => import('@/views/big-screen/RepairScreen'), // 车间大屏
   // 自定义管理
-  'CustomizeReport': () => import('@/views/customize/report/CustomizeReport') // 自定义报表
+  'CustomizeReport': () => import('@/views/customize/report/CustomizeReport'),// 自定义报表
+  'CustomFieldTemplate': () => import('@/views/customize/fieldTemplate/CustomFieldTemplate'),// 自定义模板
+  'CustomFieldTemplateData': () => import('@/views/customize/fieldTemplateData/CustomFieldTemplateData')// 自定义模板数据
 }
 
 // 前端未找到页面路由(固定不用改)
@@ -391,19 +352,6 @@ export const constantRouterMap = [
       }
     ]
   },
-  {
-    path: '/demo',
-    component: BlankLayout,
-    redirect: '/demo/test',
-    hidden: true,
-    children: [
-      {
-        path: 'test',
-        name: 'test',
-        component: () => import(/* webpackChunkName: "user" */ '@/views/test/BaseFormBak')
-      }
-    ]
-  },
   {
     path: '/screen',
     component: BlankLayout,
@@ -416,19 +364,6 @@ export const constantRouterMap = [
       }
     ]
   },
-
-  {
-    path: '/repairScreen',
-    component: BlankLayout,
-    redirect: '/screen/repair',
-    children: [
-      {
-        path: 'RepairScreen',
-        name: 'RepairScreen',
-        component: () => import('@/views/big-screen/RepairScreen')
-      }
-    ]
-  },
   {
     path: '/chartReport',
     component: BlankLayout,

+ 6 - 2
src/utils/dict.js

@@ -76,6 +76,8 @@ DictCache.TYPE = {
   FILE_DOWNLOAD_TEMPLATE: 'FILE_DOWNLOAD_TEMPLATE', // 模板文件
   DELFLAG: 'DELFLAG', // 删除标志
   SBTYPE_TYPE: 'SBTYPE_TYPE', // 设备类型
+  SB_INFO_STOP_DETAIL_TYPE: 'SB_INFO_STOP_DETAIL_TYPE', // 设备停机类型表:1停机、2启用
+  SB_INFO_STOP_DETAIL_STATUS: 'SB_INFO_STOP_DETAIL_STATUS', // 设备停机状态表:1未审核,2已审核(变更设备状态)
   FIRM_PRODUCER_LEVEL: 'FIRM_PRODUCER_LEVEL', // 供应商等级
   FIRM_PRODUCER_TYPE: 'FIRM_PRODUCER_TYPE', // 供应商类型
   SBPOSITION_TYPE: 'SBPOSITION_TYPE', // 位置类型,
@@ -282,6 +284,8 @@ DictCache.TYPE = {
   _AUDIT_MONEY: '_AUDIT_MONEY',
   CUSTOMIZE_REPORT_ECHART_TYPE: 'CUSTOMIZE_REPORT_ECHART_TYPE',
   CUSTOMIZE_REPORT_INTER_TYPE: 'CUSTOMIZE_REPORT_INTER_TYPE',
+  CUSTOM_FIELD_TEMPLATE_TYPE: 'CUSTOM_FIELD_TEMPLATE_TYPE',
+  CUSTOM_FIELD_TEMPLATE_FILED_TYPE: 'CUSTOM_FIELD_TEMPLATE_FILED_TYPE',
   PARAMETER_TYPE: 'PARAMETER_TYPE'
 
 }
@@ -550,8 +554,8 @@ DictCache.VALUE = {
     TZSB: 5// 特种设备及附件
   },
   SB_IS_CHILD: {
-    IS_CHILD: '1', // 子
-    IS_PARENT: '2', // 父
+    IS_CHILD: '1', // 子设备
+    IS_PARENT: '2', // 父设备
     IS_NORMAL: '3' // 普通设备
   },
   SB_IS_SHOW: {

+ 1 - 1
src/utils/domUtil.js

@@ -16,4 +16,4 @@ export const setDocumentTitle = function (title) {
   }
 }
 
-export const domTitle = 'HITACHI ABB'
+export const domTitle = '乾元坤和'

+ 2 - 1
src/utils/install.js

@@ -17,7 +17,8 @@ import { Icon } from 'ant-design-vue'
 import iconfont from '@/components/IconSelector/iconfont.js'
 import ImportForm from '@/components/custom/ImportForm'
 const MyIcon = Icon.createFromIconfontCN({
-  scriptUrl: iconfont // //at.alicdn.com/t/font_1314041_9qgpnn1vvko.js在 iconfont.cn 上生成
+  // scriptUrl: iconfont // //at.alicdn.com/t/font_1314041_9qgpnn1vvko.js在 iconfont.cn 上生成
+  scriptUrl: '//at.alicdn.com/t/font_3266072_h1qg9yrgg57.js'
 })
 
 export default {

+ 1 - 1
src/views/Home.vue

@@ -2,7 +2,7 @@
   <div class="home">
     <div class="banner">
       <img alt="Vue logo" style="width: 64px; height: 64px" src="../assets/logo_custom.png">
-      <h3 style="margin-top: 1rem">HITACHI ABB</h3>
+      <h3 style="margin-top: 1rem">乾元坤和</h3>
     </div>
 
     <br/>

+ 1 - 1
src/views/Scan.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <div class="fh-login">
-      <h2 style="font-size:30px;text-align: center;color: #fff">CNTHB HITACHI ABB</h2>
+      <h2 style="font-size:30px;text-align: center;color: #fff">CNTHB 乾元坤和</h2>
       <h2 style="font-size:30px;text-align: center;color: #fff">设备管理系统</h2>
       <div class="login-title">{{ user.realName }},辛苦了</div>
       <a-form

+ 1 - 1
src/views/activiti/flow/Flow.vue

@@ -18,7 +18,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('act-flow-del')">
         <a-menu slot="overlay">
           <a-popconfirm title="是否要删除所选数据?" @confirm="batchDelete()">

+ 1 - 1
src/views/activiti/model/Model.vue

@@ -18,7 +18,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="$auth('act-model-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button v-if="$auth('act-model-sync')" type="primary" @click="sync">同步</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('act-model-del')">

+ 8 - 2
src/views/big-screen/RepairScreen.vue

@@ -1,17 +1,23 @@
 <template>
-  <iframe
+<!--  <iframe
     :src="url"
     id="mobsf"
     scrolling="no"
     frameborder="0"
     allowtransparency="true"
     width="100%"
-    :height="clientHeight"></iframe>
+    :height="clientHeight"></iframe>-->
 </template>
 
 <script>
 
 export default {
+  created () {
+    const a = document.createElement('a')
+    a.target = '_blank'
+    a.href = '/hitch-screen/index.html'
+    a.click()
+  },
   data () {
     return {
       url: '/hitch-screen/index.html',

+ 97 - 81
src/views/check/checkjob/CheckJob.vue

@@ -1,7 +1,7 @@
 <template>
-  <a-card :bordered="false">
-    <div v-show="visible">
-      <div class="table-page-search-wrapper">
+  <div>
+    <a-card style="margin-bottom: 8px;padding-bottom: 0px;">
+      <div class="table-page-search-wrapper" style="padding-bottom: 0px !important;">
         <a-form layout="inline">
           <a-row :gutter="48">
             <a-col :md="6" :sm="24">
@@ -40,6 +40,8 @@
                 </a-tree-select>
               </a-form-item>
             </a-col>
+          </a-row>
+          <a-row :gutter="48" v-if="advanced">
             <a-col :md="6" :sm="24">
               <a-form-item label="维护等级">
                 <a-select v-model="queryParam.standardLevel" placeholder="请选择">
@@ -101,93 +103,105 @@
                 />
               </a-form-item>
             </a-col>
-            <a-col :md="24" :sm="24">
+          </a-row>
+        </a-form>
+      </div>
+    </a-card>
+
+    <a-card :bordered="false">
+      <div v-show="visible">
+        <div class="table-operator" style="margin-bottom: 16px;">
+          <a-row>
+            <a-col :md="16">
+              <a-button v-if="$auth('check-polling-jobs-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
+              <a-button style="margin-left: 8px" type="primary" v-if="($auth('check-spot-jobs-export') || $auth('check-polling-jobs-export'))" icon="download" @click="doExport">导出</a-button>
+              <a-button style="margin-left:8px;" type="primary" @click="doImportForUpdate">
+                <a-icon type="upload"/>
+                修改导入
+              </a-button>
+              <a-button style="margin-left: 8px" type="primary" @click="handleSeven">本周</a-button>
+              <a-button style="margin-left: 8px" type="primary" @click="handleMonth">本月</a-button>
+              <a-button style="margin-left: 8px" type="primary" @click="handleTuiCalendar">日历图</a-button>
+              <a-button style="margin-left: 8px" type="primary" @click="handleExecuteBatch" v-if="selectedRowKeys.length > 0">
+                <a-icon style="margin-left: 8px" type="plus"/>
+                批量接收
+              </a-button>
+              <a-button style="margin-left: 8px" type="primary" v-if="selectedRowKeys.length > 0" @click="handleFinishBatch">
+                <a-icon type="plus"/>
+                批量完成
+              </a-button>
+              <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && ($auth('check-spot-jobs-edit') || $auth('check-polling-jobs-edit'))">
+                <a-menu slot="overlay">
+                  <a-popconfirm title="是否要删除所选数据?" @confirm="batchDelete()">
+                    <a-menu-item key="1"><a-icon type="delete" /><a>删除</a></a-menu-item>
+                  </a-popconfirm>
+                </a-menu>
+                <a-button style="margin-left: 8px">
+                  批量操作 <a-icon type="down" />
+                </a-button>
+              </a-dropdown>
+            </a-col>
+            <a-col style="text-align: right">
               <span class="table-page-search-submitButtons">
                 <a-button type="primary" @click="handleOk">查询</a-button>
                 <a-button style="margin-left: 8px" @click="resetSearchForm">重置</a-button>
+                <a @click="()=>{ this.advanced = !this.advanced}" style="margin-left: 8px">
+                  {{ advanced ? '收起' : '展开' }}
+                  <a-icon :type="advanced ? 'up' : 'down'"/>
+                </a>
               </span>
             </a-col>
           </a-row>
-        </a-form>
-      </div>
-
-      <div class="table-operator">
-        <a-button v-if="$auth('check-polling-jobs-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
-        <a-button style="margin-left: 8px" v-if="($auth('check-spot-jobs-export') || $auth('check-polling-jobs-export'))" type="primary" icon="download" @click="doExport">导出</a-button>
-        <a-button style="margin-left:8px;" type="primary" @click="doImportForUpdate">
-          <a-icon type="upload"/>
-          修改导入
-        </a-button>
-        <a-button style="margin-left: 8px" type="success" @click="handleSeven">本周</a-button>
-        <a-button style="margin-left: 8px" type="success" @click="handleMonth">本月</a-button>
-        <a-button style="margin-left: 8px" type="success" @click="handleTuiCalendar">日历图</a-button>
-        <a-button style="margin-left: 8px" type="primary" @click="handleExecuteBatch" v-if="selectedRowKeys.length > 0">
-          <a-icon style="margin-left: 8px" type="plus"/>
-          批量接收
-        </a-button>
-        <a-button style="margin-left: 8px" type="primary" v-if="selectedRowKeys.length > 0" @click="handleFinishBatch">
-          <a-icon type="plus"/>
-          批量完成
-        </a-button>
-        <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && ($auth('check-spot-jobs-edit') || $auth('check-polling-jobs-edit'))">
-          <a-menu slot="overlay">
-            <a-popconfirm title="是否要删除所选数据?" @confirm="batchDelete()">
-              <a-menu-item key="1"><a-icon type="delete" /><a>删除</a></a-menu-item>
-            </a-popconfirm>
-          </a-menu>
-          <a-button style="margin-left: 8px">
-            批量操作 <a-icon type="down" />
-          </a-button>
-        </a-dropdown>
-      </div>
-      <s-table
-        ref="table"
-        size="default"
-        rowKey="id"
-        :columns="columns"
-        :scroll="{x: 1, y: BaseTool.Constant.scrollY }"
-        :data="loadData"
-        :alert="options.alert"
-        :rowSelection="options.rowSelection"
-        showPagination="auto"
-      >
-        <span slot="action" slot-scope="record">
-          <template>
-            <a @click="handleView(record)">查看</a>
-            <template v-if="record.status == DictCache.VALUE.CHECK_JOB_STATUS.NOT_EXECUTE">
-              <a-divider type="vertical" />
-              <a @click="handleExecute(record)">接收</a>
-            </template>
-            <template v-if="record.status === DictCache.VALUE.CHECK_JOB_STATUS.EXECUTING">
-              <a-divider type="vertical" />
-              <a @click="handleFinish(record)">完成</a>
-            </template>
-            <template v-if="record.status == DictCache.VALUE.CHECK_JOB_STATUS.NOT_EXECUTE || record.status === DictCache.VALUE.CHECK_JOB_STATUS.EXECUTING">
-              <a-divider type="vertical" />
-              <a @click="handleEdit(record)">修改</a>
-            </template>
+        </div>
+        <s-table
+          ref="table"
+          size="default"
+          rowKey="id"
+          :columns="columns"
+          :scroll="{x: 1, y: BaseTool.Constant.scrollY }"
+          :data="loadData"
+          :alert="options.alert"
+          :rowSelection="options.rowSelection"
+          showPagination="auto"
+        >
+          <span slot="action" slot-scope="record">
+            <template>
+              <a @click="handleView(record)">查看</a>
+              <template v-if="record.status == DictCache.VALUE.CHECK_JOB_STATUS.NOT_EXECUTE">
+                <a-divider type="vertical" />
+                <a @click="handleExecute(record)">接收</a>
+              </template>
+              <template v-if="record.status === DictCache.VALUE.CHECK_JOB_STATUS.EXECUTING">
+                <a-divider type="vertical" />
+                <a @click="handleFinish(record)">完成</a>
+              </template>
+              <template v-if="record.status == DictCache.VALUE.CHECK_JOB_STATUS.NOT_EXECUTE || record.status === DictCache.VALUE.CHECK_JOB_STATUS.EXECUTING">
+                <a-divider type="vertical" />
+                <a @click="handleEdit(record)">修改</a>
+              </template>
             <!--          <a-divider type="vertical" />-->
             <!--          <a-popconfirm v-if="$auth('check-jobs-del')" title="是否要删除该条数据?" @confirm="batchDelete(record.id)">-->
             <!--            <a>删除</a>-->
             <!--          </a-popconfirm>-->
-          </template>
-        </span>
-        <span slot="status" slot-scope="text">
-          <badge
-            :status="DictCache.COLOR.JOB_STATUS[text]"
-            :text="statusMap[text]" />
-        </span>
-        <span slot="stopFlag" slot-scope="text">
-          <badge
-            :status="DictCache.COLOR.YES_NO[text]"
-            :text="sbStatusMap[text]" />
-        </span>
-      </s-table>
-    </div>
-    <base-form :check-type="checkType" ref="baseModal" @ok="handleOk"/>
-    <detail :check-type="checkType" ref="detailModal" @ok="handleOk"/>
-    <import-form-update ref="importModalUpdate" @ok="handleOk"/>
-  </a-card>
+            </template>
+          </span>
+          <span slot="status" slot-scope="text">
+            <badge
+              :status="DictCache.COLOR.JOB_STATUS[text]"
+              :text="statusMap[text]" />
+          </span>
+          <span slot="stopFlag" slot-scope="text">
+            <badge
+              :status="DictCache.COLOR.YES_NO[text]"
+              :text="sbStatusMap[text]" />
+          </span>
+        </s-table>
+      </div>
+      <base-form :check-type="checkType" ref="baseModal" @ok="handleOk"/>
+      <detail :check-type="checkType" ref="detailModal" @ok="handleOk"/>
+      <import-form-update ref="importModalUpdate" @ok="handleOk"/>
+    </a-card>
+  </div>
 </template>
 
 <script>
@@ -239,6 +253,7 @@ export default {
     this.names = ['负责', '巡检']
     return {
       visible: true,
+      advanced: false,
       // 查询参数
       queryParam: {
         type: this.checkType,
@@ -247,7 +262,8 @@ export default {
         filter: this.filter,
         status: this.status,
         receiveOvertime: this.receiveOvertime,
-        statusList: this.statusList
+        statusList: this.statusList,
+        sbId: this.$route.query.id
       },
       treeData: [],
       // 表头

+ 1 - 1
src/views/check/checkjob/modules/CheckJobSelectModal.vue

@@ -26,7 +26,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 1 - 1
src/views/check/checkjob/modules/CheckJobTable.vue

@@ -37,7 +37,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <!--      <a-button v-if="$auth('check-jobs-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>-->
       <a-button style="margin-left: 8px" v-if="($auth('check-spot-jobs-export') || $auth('check-polling-jobs-export'))" type="primary" icon="download" @click="doExport">导出</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && ($auth('check-spot-jobs-finish') || $auth('check-polling-jobs-finish'))">

+ 1 - 1
src/views/check/checkjob/modules/CheckJobTableWaitDo.vue

@@ -45,7 +45,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <!--      <a-button v-if="$auth('check-jobs-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button style="margin-left: 8px" v-if="($auth('check-spot-jobs-export') || $auth('check-polling-jobs-export'))" type="primary" icon="download" @click="doExport">导出</a-button>-->
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && ($auth('check-spot-jobs-finish') || $auth('check-polling-jobs-finish'))">

+ 1 - 1
src/views/check/checkplan/CheckPlan.vue

@@ -43,7 +43,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="($auth('check-spot-plans-add') || $auth('check-polling-plans-add'))" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button style="margin-left: 8px" v-if="($auth('check-spot-plans-export') || $auth('check-polling-plans-export'))" type="primary" icon="download" @click="doExport">导出</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('check-plans-del')">

+ 1 - 1
src/views/check/checkplan/modules/BaseForm.vue

@@ -223,7 +223,7 @@
     </a-form>
     <a-tabs type="card" default-active-key="1">
       <a-tab-pane key="1" tab="计划设备">
-        <div class="table-operator">
+        <div class="table-operator" style="margin-bottom: 8px;">
           <a-button size="small" type="primary" @click="handleProjectSelect">
             <a-icon type="plus"/>
             添加

+ 1 - 1
src/views/check/checkplan/modules/CheckPlanSelectModal.vue

@@ -26,7 +26,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 1 - 1
src/views/check/checkproject/CheckProject.vue

@@ -18,7 +18,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="($auth('check-spot-projects-add') || $auth('check-polling-projects-add'))" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button style="margin-left: 8px" v-if="($auth('check-spot-projects-export') || $auth('check-polling-projects-export'))" type="primary" icon="download" @click="doExport">导出</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && ($auth('check-spot-projects-del') || $auth('check-polling-projects-del'))">

+ 1 - 1
src/views/check/checkproject/modules/AddForm.vue

@@ -185,7 +185,7 @@
     </a-form>
     <a-tabs type="card" default-active-key="1">
       <a-tab-pane key="1" tab="检查标准">
-        <div class="table-operator">
+        <div class="table-operator" style="margin-bottom: 8px;">
           <a-button size="small" type="primary" @click="handleStandardSelect">
             <a-icon type="plus"/>
             添加

+ 1 - 1
src/views/check/checkproject/modules/BaseForm.vue

@@ -184,7 +184,7 @@
     </a-form>
     <a-tabs type="card" default-active-key="1">
       <a-tab-pane key="1" tab="检查标准">
-        <div class="table-operator">
+        <div class="table-operator" style="margin-bottom: 8px;">
           <a-button size="small" type="primary" @click="handleStandardSelect">
             <a-icon type="plus"/>
             添加

+ 1 - 1
src/views/check/checkproject/modules/CheckProjectSelectModal.vue

@@ -26,7 +26,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 4 - 2
src/views/check/checkstandard/CheckStandard.vue

@@ -79,7 +79,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
         <a-button
           v-if="($auth('check-spot-standards-add') || $auth('check-polling-standards-add'))"
           type="primary"
@@ -207,7 +207,9 @@ export default {
       visible: true,
       confirmLoading: false,
       queryParam: {
-        type: this.checkType
+        type: this.checkType,
+        sbId: this.$route.query.id
+
       },
       // 表头
       columns: [

+ 5 - 5
src/views/check/checkstandard/modules/BaseForm.vue

@@ -299,8 +299,8 @@
         </row-item>
       </row-list>
     </a-form>
-    <title-divider title="关联备件" width="100px"></title-divider>
-    <div class="table-operator">
+<!--    <title-divider title="关联备件" width="100px"></title-divider>
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button style="margin-left:8px;" type="primary" @click="handleSpareSelect">
         <a-icon type="plus"/>
         添加
@@ -325,14 +325,14 @@
       </template>
       <span slot="action" slot-scope="record">
         <template>
-          <!--          <a @click="handleDetailSelect(record)">修改</a>
-          <a-divider type="vertical" />-->
+          &lt;!&ndash;          <a @click="handleDetailSelect(record)">修改</a>
+          <a-divider type="vertical" />&ndash;&gt;
           <a-popconfirm title="是否要删除该条数据?" @confirm="handleDelOne(record)">
             <a>删除</a>
           </a-popconfirm>
         </template>
       </span>
-    </a-table>
+    </a-table>-->
     <template slot="footer">
       <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
     </template>

+ 1 - 1
src/views/check/checkstandard/modules/CheckStandardSelectModal.vue

@@ -26,7 +26,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 2 - 2
src/views/check/checkstandard/modules/Detail.vue

@@ -61,14 +61,14 @@
         </a-table>
       </a-tab-pane>
     </a-tabs>-->
-    <title-divider title="关联备件" width="90px"></title-divider>
+<!--    <title-divider title="关联备件" width="90px"></title-divider>
     <a-table
       :data-source="data"
       :columns="columns"
       bordered
       tableLayout="auto"
       rowKey="bomId">
-    </a-table>
+    </a-table>-->
     <template slot="footer">
       <a-button :loading="confirmLoading" type="primary" @click="handleCancel()">返回</a-button>
     </template>

+ 280 - 0
src/views/customize/fieldTemplate/CustomFieldTemplate.vue

@@ -0,0 +1,280 @@
+<template>
+  <a-card :bordered="false">
+    <div v-show="visible">
+      <div class="table-page-search-wrapper" @keyup.enter="handleEnter">
+        <a-form layout="inline">
+          <a-row :gutter="48" v-show="advanced">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="关键字">
+                <a-input v-model="queryParam.keyword" placeholder="请输入名称/类型名称"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="类型">
+                <a-select
+                  v-model="queryParam.type"
+                  placeholder="请选择">
+                  <a-select-option
+                    v-for="(label,value) in typeMap"
+                    :key="value"
+                    :label="label"
+                    :value="parseInt(value)">{{ label }}
+                  </a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+          </a-row>
+          <a-row :gutter="48">
+            <a-col :md="24 || 24" :sm="24" style="text-align: right">
+              <span class="table-page-search-submitButtons">
+                <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
+                <a-button style="margin-left: 8px" @click="resetSearchForm">重置</a-button>
+                <a @click="()=>{ this.advanced = !this.advanced}" style="margin-left: 8px">
+                  {{ advanced ? '收起' : '展开' }}
+                  <a-icon :type="advanced ? 'up' : 'down'"/>
+                </a>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+
+      <div class="table-operator" style="margin-bottom: 8px;">
+        <a-row>
+          <a-col :md="16">
+            <a-button v-if="$auth('customize-fieldTemplate-add')" type="primary" icon="plus" @click="handleAdd()">新增</a-button>
+            <a-button style="margin-left: 8px" v-if="$auth('customize-fieldTemplate-export')" type="primary" icon="download" @click="doExport">导出</a-button>
+            <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('customize-fieldTemplate-del')">
+              <a-menu slot="overlay">
+                <a-popconfirm title="是否要删除所选数据?" @confirm="batchDelete()">
+                  <a-menu-item key="1"><a-icon type="delete" /><a>删除</a></a-menu-item>
+                </a-popconfirm>
+              </a-menu>
+              <a-button style="margin-left: 8px">
+                批量操作 <a-icon type="down" />
+              </a-button>
+            </a-dropdown>
+          </a-col>
+        </a-row>
+      </div>
+
+      <s-table
+        ref="table"
+        size="default"
+        rowKey="id"
+        :columns="columns"
+        :data="loadData"
+        :alert="options.alert"
+        :rowSelection="options.rowSelection"
+        showPagination="auto"
+      >
+        <span slot="action" slot-scope="record">
+          <template>
+            <a @click="handleView(record)">查看</a>
+            <operation-button
+              v-if="$auth('customize-fieldTemplate-edit')"
+              @click="handleEdit(record)"
+            >修改</operation-button>
+            <operation-button
+              v-if="$auth('customize-fieldTemplate-del')"
+              :type="2"
+              title="是否要删除该条数据?"
+              @confirm="batchDelete(record.id)">删除</operation-button>
+          </template>
+        </span>
+      </s-table>
+    </div>
+    <base-form ref="baseModal" @ok="handleOk"/>
+    <detail ref="detailModal" @ok="handleOk"/>
+  </a-card>
+</template>
+
+<script>
+import { STable, Ellipsis } from '@/components'
+import BaseForm from './modules/BaseForm'
+import Detail from './modules/Detail'
+import { getCustomFieldTemplatePage, deleteCustomFieldTemplates, fetchCustomFieldTemplate, exportCustomFieldTemplate } from '@/api/customize/fieldTemplate'
+
+export default {
+  name: 'CustomFieldTemplateList',
+  components: {
+    STable,
+    Ellipsis,
+    BaseForm,
+    Detail
+  },
+  data () {
+    return {
+      advanced: false,
+      visible: true,
+      // 查询参数
+      queryParam: {
+      },
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return `${(this.$refs.table.localPagination.current - 1) * this.$refs.table.localPagination.pageSize + index + 1}`
+          }
+        },
+/*        {
+          title: '模板内容',
+          dataIndex: 'content'
+        },*/
+        {
+          title: '类型',
+          dataIndex: 'type',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Table.getMapText(this.typeMap, text)
+          }
+        },
+        {
+          title: '备注',
+          dataIndex: 'remark'
+        },
+        {
+          title: '创建日期',
+          dataIndex: 'createdTime'
+        },
+        {
+          title: '创建人名称',
+          dataIndex: 'createdUserName'
+        },
+        {
+          title: '二级类别',
+          dataIndex: 'secondTypeId'
+        },
+        {
+          title: '操作',
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 下拉框map
+      typeMap: {},
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter = {
+          ...parameter,
+          ...this.queryParam,
+          dataScope: {
+            sortBy: 'desc',
+            sortName: 'update_time'
+          }
+        }
+        return getCustomFieldTemplatePage(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.data
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      options: {
+        alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false
+    }
+  },
+  created () {
+    // 下拉框map
+    this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_TYPE)
+    this.tableOption()
+  },
+  methods: {
+    tableOption () {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: false,
+                name: record.id
+              }
+            })
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    batchDelete (id) {
+      let ids = []
+      if (this.BaseTool.String.isBlank(id)) {
+        const length = this.selectedRows.length
+        if (length === 0) {
+          this.$message.info('请选择要删除的记录')
+          return
+        }
+        ids = this.selectedRows.map(item => item.id)
+      } else {
+        ids = [id]
+      }
+      deleteCustomFieldTemplates(ids).then(res => {
+        this.$message.info('删除成功')
+        this.handleOk()
+        this.$refs.table.clearSelected()
+      })
+    },
+    handleAdd () {
+      this.visible = false
+      const modal = this.$refs.baseModal
+      modal.base()
+    },
+    handleEdit (record) {
+      this.visible = false
+      fetchCustomFieldTemplate({ id: record.id }).then(res => {
+        const modal = this.$refs.baseModal
+        modal.base(res.data)
+      })
+    },
+    handleView (record) {
+      this.visible = false
+      fetchCustomFieldTemplate({ id: record.id }).then(res => {
+        const modal = this.$refs.detailModal
+        modal.base(res.data)
+      })
+    },
+    handleOk (values) {
+      this.visible = true
+      this.$refs.table.refresh()
+    },
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    resetSearchForm () {
+      this.queryParam = {
+      }
+      this.$refs.table.refresh(true)
+    },
+    doExport () {
+      const parameter = {
+        ...this.queryParam
+      }
+      exportCustomFieldTemplate(parameter).then(file => {
+        this.BaseTool.Util.downLoadExportExcel(file)
+      })
+    },
+    handleEnter () {
+      this.$refs.table.refresh(true)
+    }
+  }
+}
+</script>

+ 285 - 0
src/views/customize/fieldTemplate/modules/BaseForm.vue

@@ -0,0 +1,285 @@
+<template>
+  <a-card :bordered="false" v-show="visible" class="card" :title="modalTitle">
+    <a-row :gutter="48" slot="extra">
+      <a-col :md="48" :sm="48">
+        <span class="table-page-search-submitButtons" style="float: right">
+          <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
+          <a-button style="margin-left: 8px" type="default" @click="handleCancel()">返回</a-button>
+        </span>
+      </a-col>
+    </a-row>
+    <a-form :form="form">
+
+      <a-form-item v-show="false">
+        <a-input v-decorator="['id']" type="hidden"/>
+      </a-form-item>
+      <row-list :col="2">
+        <row-item>
+          <a-form-item
+            label="类型"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select
+              v-decorator="['type', {rules: [{required: true, message: '类型不能为空'}]}]"
+              placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in typeMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label="备注"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['remark', {rules: [{required: true, message: '备注不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label="二级类别"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['secondTypeId', {rules: [{required: false, message: '二级类别不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+      </row-list>
+    </a-form>
+    <title-divider title="字段明细" width="90px"></title-divider>
+    <div class="table-operator" style="margin-bottom: 8px;">
+      <a-button size="small" type="primary" @click="handleParam">
+        <a-icon type="plus"/>
+        添加
+      </a-button>
+      <a-button class="margin-left8" size="small" type="danger" @click="handleDelParam">
+        <a-icon type="delete"/>
+        删除
+      </a-button>
+    </div>
+    <a-table
+      bordered
+      :data-source="data"
+      :columns="columns"
+      tableLayout="auto"
+      rowKey="fieldName"
+      :row-selection="rowSelection">
+      <span slot="action" slot-scope="record">
+        <template>
+          <a @click="handleParam(record)">修改</a>
+          <a-divider type="vertical" />
+          <a-popconfirm title="是否要删除该条数据?" @confirm="handleDelParam(record.fieldName)">
+            <a>删除</a>
+          </a-popconfirm>
+        </template>
+      </span>
+    </a-table>
+    <param-form ref="paramForm" @ok="handleParamList" />
+  </a-card>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+import ParamForm from './ParamForm'
+import { addCustomFieldTemplate, updateCustomFieldTemplate } from '@/api/customize/fieldTemplate'
+import DetailList from '@/components/tools/DetailList'
+export default {
+  name: 'BaseCustomFieldTemplate',
+  components: {
+    ParamForm,
+    DetailList
+  },
+  data () {
+    return {
+      confirmLoading: false,
+      modalTitle: null,
+      data: [],
+      form: this.$form.createForm(this),
+      visible: false,
+      // 下拉框map
+      typeMap: {},
+      typeFieldMap: {},
+      rowSelection: {
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.selectedRowKeys = selectedRowKeys
+          this.selectedRows = selectedRows
+        }
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys
+        }
+      },
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return index + 1
+          }
+        },
+        {
+          title: '显示名称',
+          dataIndex: 'label'
+        },
+        {
+          title: '字段名称',
+          dataIndex: 'fieldName'
+        },
+        {
+          title: '类型',
+          dataIndex: 'type',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Object.getField(this.typeFieldMap, text)
+          }
+        },
+        {
+          title: '是否必填',
+          dataIndex: 'required'
+        },
+        {
+          title: '显示行数',
+          dataIndex: 'rows',
+          width: 120
+        },
+        {
+          title: '排序',
+          dataIndex: 'sort',
+          width: 150
+        },
+        {
+          title: '默认值',
+          dataIndex: 'defaultValue',
+          width: 150
+        },
+        {
+          title: '最小长度',
+          dataIndex: 'minLength',
+          width: 150
+        },
+        {
+          title: '最大长度',
+          dataIndex: 'maxLength',
+          width: 150
+        },
+        {
+          title: '操作',
+          key: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ]
+    }
+  },
+  props: {},
+  created () {
+    // 下拉框map
+    this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_TYPE)
+    this.typeFieldMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_FILED_TYPE)
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      // 如果是空标识添加
+      if (this.BaseTool.Object.isBlank(record)) {
+        this.modalTitle = '添加'
+        return
+      }
+      this.modalTitle = '编辑'
+      const { form: { setFieldsValue } } = this
+      this.data = JSON.parse(record.content)
+      // 日期处理
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign(pick(record, [
+          'id',
+          'content',
+          'type',
+          'remark',
+          'secondTypeId'
+        ])))
+      })
+    },
+    save () {
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        values.content = JSON.stringify(this.data)
+        // 日期处理
+        if (this.BaseTool.String.isBlank(values.id)) {
+          addCustomFieldTemplate(values)
+            .then(() => {
+              this.handleCancel(values)
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+        } else {
+          updateCustomFieldTemplate(values)
+            .then(() => {
+              this.handleCancel(values)
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+        }
+      })
+    },
+    handleCancel (values) {
+      this.visible = false
+      this.confirmLoading = false
+      this.form.resetFields()
+      this.data = []
+      if (this.BaseTool.Object.isNotBlank(values)) {
+        this.$emit('ok', values)
+      } else {
+        this.$emit('ok')
+      }
+    },
+    handleParam (record) {
+      const modal = this.$refs.paramForm
+      modal.base(record)
+    },
+    handleParamList (values) {
+      let dataSource = [...this.data]
+      if (dataSource == null) {
+        dataSource = []
+      }
+      if (values.label == null || values.label === '') {
+        return
+      }
+      let find = false
+      for (let j = 0; j < dataSource.length; j++) {
+        if (values.fieldName === dataSource[j].fieldName) {
+          find = true
+          this.data = dataSource.map(item => {
+            return item.fieldName === values.fieldName ? values : item
+          })
+          break
+        }
+      }
+      if (!find) {
+        dataSource.push(values)
+      }
+    },
+    handleDelParam (fieldName) {
+      const dataSource = [...this.data]
+      this.data = dataSource.filter(item => item.fieldName !== fieldName)
+    }
+  }
+}
+</script>

+ 37 - 25
src/views/monthly/sb-three-rate/modules/MonthlySbThreeRateSelectModal.vue → src/views/customize/fieldTemplate/modules/CustomFieldTemplateSelectModal.vue

@@ -11,15 +11,29 @@
       <div class="table-page-search-wrapper">
         <a-form layout="inline">
           <a-row :gutter="48">
-            <a-col :md="8" :sm="24">
+            <a-col :md="6" :sm="24">
               <a-form-item label="关键字">
                 <a-input v-model="queryParam.keyword" placeholder="请输入名称/类型名称"/>
               </a-form-item>
             </a-col>
-            <a-col :md="8 || 24" :sm="24">
+            <a-select
+              v-model="queryParam.type"
+              placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in typeMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+            <a-col :md="6 || 24" :sm="24">
               <span class="table-page-search-submitButtons">
                 <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
                 <a-button style="margin-left: 8px" @click="resetSearchForm">重置</a-button>
+                <a @click="()=>{ this.advanced = !this.advanced}" style="margin-left: 8px">
+                  {{ advanced ? '收起' : '展开' }}
+                  <a-icon :type="advanced ? 'up' : 'down'"/>
+                </a>
               </span>
             </a-col>
           </a-row>
@@ -58,10 +72,10 @@
 <script>
 import { STable, Ellipsis } from '@/components'
 import Detail from './Detail'
-import { getMonthlySbThreeRatePage, fetchMonthlySbThreeRate } from '@/api/monthly/sb-three-rate'
+import { getCustomFieldTemplatePage, fetchCustomFieldTemplate } from '@/api/customize/fieldTemplate'
 
 export default {
-  name: 'MonthlySbThreeRateSelectModal',
+  name: 'CustomFieldTemplateSelectModal',
   components: {
     STable,
     Ellipsis,
@@ -87,6 +101,7 @@ export default {
   },
   data () {
     return {
+      advanced: false,
       confirmLoading: false,
       mdl: {},
       modalTitle: null,
@@ -107,37 +122,32 @@ export default {
           }
         },
         {
-          title: '年份',
-          dataIndex: 'year'
+          title: '模板内容',
+          dataIndex: 'content'
         },
         {
-          title: '月份',
-          dataIndex: 'month'
-        },
-        {
-          title: '完好数',
-          dataIndex: 'intactNum'
-        },
-        {
-          title: '待修数',
-          dataIndex: 'repairNum'
-        },
-        {
-          title: '事故数',
-          dataIndex: 'accidentNum'
+          title: '类型',
+          dataIndex: 'type',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Table.getMapText(this.typeMap, text)
+          }
         },
         {
-          title: '总数',
-          dataIndex: 'sumNum'
+          title: '备注',
+          dataIndex: 'remark'
         },
         {
-          title: '添加时间',
+          title: '创建日期',
           dataIndex: 'createdTime'
         },
         {
           title: '创建人名称',
           dataIndex: 'createdUserName'
         },
+        {
+          title: '二级类别',
+          dataIndex: 'secondTypeId'
+        },
         {
           title: '操作',
           key: 'action',
@@ -147,6 +157,7 @@ export default {
         }
       ],
       // 下拉框map
+      typeMap: {},
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         parameter = {
@@ -158,7 +169,7 @@ export default {
             sortName: 'update_time'
           }
         }
-        return getMonthlySbThreeRatePage(Object.assign(parameter, this.queryParam))
+        return getCustomFieldTemplatePage(Object.assign(parameter, this.queryParam))
           .then(res => {
             return res.data
           })
@@ -179,6 +190,7 @@ export default {
   },
   created () {
     // 下拉框map
+    this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_TYPE)
   },
   methods: {
     tableOption () {
@@ -221,7 +233,7 @@ export default {
       }
     },
     handleView (record) {
-      fetchMonthlySbThreeRate({ id: record.id }).then(res => {
+      fetchCustomFieldTemplate({ id: record.id }).then(res => {
         const modal = this.$refs.detailModal
         modal.base(res.data)
       })

+ 195 - 0
src/views/customize/fieldTemplate/modules/Detail.vue

@@ -0,0 +1,195 @@
+<template>
+  <a-card :bordered="false" v-show="visible" class="card" :title="modalTitle">
+    <a-row :gutter="48" slot="extra">
+      <a-col :md="48" :sm="48">
+        <span class="table-page-search-submitButtons" style="float: right">
+          <a-button style="margin-left: 8px" type="default" @click="handleCancel()">返回</a-button>
+        </span>
+      </a-col>
+    </a-row>
+    <detail-list title="" :col="2">
+      <!--      <detail-list-item term="模板内容">{{ model.content }}</detail-list-item>-->
+      <detail-list-item term="类型">{{ BaseTool.Object.getField(this.typeMap,model.type) }}</detail-list-item>
+      <detail-list-item term="备注">{{ model.remark }}</detail-list-item>
+      <detail-list-item term="更新日期">{{ model.updateTime }}</detail-list-item>
+      <detail-list-item term="创建人">{{ model.createdUserId }}</detail-list-item>
+      <detail-list-item term="更新人">{{ model.updateUserId }}</detail-list-item>
+      <detail-list-item term="更新人名称">{{ model.updateUserName }}</detail-list-item>
+      <detail-list-item term="二级类别">{{ model.secondTypeId }}</detail-list-item>
+    </detail-list>
+    <title-divider title="字段明细" width="90px"></title-divider>
+    <a-table
+      bordered
+      :data-source="data"
+      :columns="columns"
+      tableLayout="auto"
+      rowKey="fieldName">
+      <span slot="action" slot-scope="record">
+        <template>
+          <a @click="handleOptionList(record)">下拉选项</a>
+        </template>
+      </span>
+    </a-table>
+    <a-modal
+      title="下拉选项"
+      :width="800"
+      :visible="visibleOptions"
+      class="ant-modal2"
+      @cancel="handleCancel2">
+      <a-table
+        bordered
+        :data-source="dataOptions"
+        :columns="columnOptions"
+        tableLayout="auto"
+        rowKey="name">
+      </a-table>
+      <template slot="footer">
+        <a-button :loading="confirmLoading" type="default" @click="handleCancel2()">关闭</a-button>
+      </template>
+    </a-modal>
+  </a-card>
+</template>
+
+<script>
+import DetailList from '@/components/tools/DetailList'
+const DetailListItem = DetailList.Item
+export default {
+  name: 'CustomFieldTemplateDetail',
+  components: {
+    DetailList,
+    DetailListItem
+  },
+  data () {
+    return {
+      confirmLoading: false,
+      mdl: {},
+      modalTitle: null,
+      visible: false,
+      visibleOptions: false,
+      // 下拉框map
+      typeMap: {},
+      typeFieldMap: {},
+      yesNoMap: {},
+      model: {
+        'content': null,
+        'type': null,
+        'remark': null,
+        'updateTime': null,
+        'createdUserId': null,
+        'updateUserId': null,
+        'updateUserName': null,
+        'secondTypeId': null
+      },
+      data: [],
+      dataOptions: [],
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return index + 1
+          }
+        },
+        {
+          title: '显示名称',
+          dataIndex: 'label'
+        },
+        {
+          title: '字段名称',
+          dataIndex: 'fieldName'
+        },
+        {
+          title: '类型',
+          dataIndex: 'type',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Object.getField(this.typeFieldMap, text)
+          }
+        },
+        {
+          title: '是否必填',
+          dataIndex: 'required',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Object.getField(this.yesNoMap, text)
+          }
+        },
+        {
+          title: '显示行数',
+          dataIndex: 'rows',
+          width: 120
+        },
+        {
+          title: '排序',
+          dataIndex: 'sort',
+          width: 150
+        },
+        {
+          title: '默认值',
+          dataIndex: 'defaultValue',
+          width: 150
+        },
+        {
+          title: '最小长度',
+          dataIndex: 'minLength',
+          width: 150
+        },
+        {
+          title: '最大长度',
+          dataIndex: 'maxLength',
+          width: 150
+        },
+        {
+          title: '操作',
+          key: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      columnOptions: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return index + 1
+          }
+        },
+        {
+          title: '参数名称',
+          dataIndex: 'name'
+        },
+        {
+          title: '参数值',
+          dataIndex: 'value'
+        }
+      ]
+    }
+  },
+  created () {
+    // 下拉框map
+    this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_TYPE)
+    this.typeFieldMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_FILED_TYPE)
+    this.yesNoMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      this.modalTitle = '详情'
+      this.model = record
+      this.data = JSON.parse(record.content)
+    },
+    handleCancel () {
+      this.visible = false
+      this.confirmLoading = false
+      this.$emit('ok')
+    },
+    handleCancel2 () {
+      this.visibleOptions = false
+      this.dataOptions = []
+    },
+    handleOptionList (record) {
+      this.visibleOptions = true
+      this.dataOptions = record.optionList
+    }
+  }
+}
+</script>

+ 35 - 30
src/views/sb/oil/modules/ExecuteBaseFormList.vue → src/views/customize/fieldTemplate/modules/OptionForm.vue

@@ -4,20 +4,30 @@
     :width="800"
     :visible="visible"
     :confirmLoading="confirmLoading"
-    class="ant-modal2"
     @cancel="handleCancel"
   >
     <a-form :form="form">
+      <row-list :col="2">
+        <row-item>
+          <a-form-item
+            label="参数名称"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['name']"/>
+          </a-form-item>
+        </row-item>
+      </row-list>
       <row-list :col="1">
         <row-item>
           <a-form-item
-            label="说明"
+            label="参数值"
             :labelCol="BaseTool.Constant.labelCol2"
             :wrapperCol="BaseTool.Constant.wrapperCol2"
           >
-            <a-textarea
-              :rows="4"
-              v-decorator="['handleRemark',{initialValue: model.remark}]"/>
+            <a-input
+              v-decorator="['value']"/>
           </a-form-item>
         </row-item>
       </row-list>
@@ -29,40 +39,41 @@
 </template>
 
 <script>
-import { updateOilSbOilList } from '@/api/sb/oil'
+import { queryUserDept } from '@/api/upms/user-dept'
+import { queryUser } from '@/api/upms/user'
+import pick from 'lodash.pick'
 
 export default {
-  name: 'BaseSbOil',
-  components: {
-  },
+  name: 'DispatchBaseForm',
   data () {
     return {
       confirmLoading: false,
       modalTitle: null,
       form: this.$form.createForm(this),
-      status: 2,
-      model: {},
       visible: false,
       // 下拉框map
-      statusMap: {},
-      ids: []
+      record: {},
     }
   },
-  props: {},
+  props: {
+  },
   created () {
     // 下拉框map
-    this.statusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SB_OIL_STATUS)
   },
   methods: {
-    base (ids) {
+    base (record) {
       this.visible = true
       // 如果是空标识添加
-      this.modalTitle = '批量加油'
-      this.ids = ids
-    },
-    statusChange (val) {
-      console.log(val)
-      this.status = val
+      this.modalTitle = '派工'
+      this.record = record
+      const { form: { setFieldsValue } } = this
+      // 日期处理
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign(pick(record, [
+          'name',
+          'value'
+        ])))
+      })
     },
     save () {
       const { form: { validateFieldsAndScroll } } = this
@@ -72,13 +83,7 @@ export default {
           this.confirmLoading = false
           return
         }
-        values.ids = this.ids
-        updateOilSbOilList(values)
-          .then(() => {
-            this.handleCancel(values)
-          }).catch(() => {
-            this.confirmLoading = false
-          })
+        this.handleCancel(values)
       })
     },
     handleCancel (values) {
@@ -86,10 +91,10 @@ export default {
       this.confirmLoading = false
       this.form.resetFields()
       if (this.BaseTool.Object.isNotBlank(values)) {
+        console.log(values)
         this.$emit('ok', values)
       }
     }
-
   }
 }
 </script>

+ 309 - 0
src/views/customize/fieldTemplate/modules/ParamForm.vue

@@ -0,0 +1,309 @@
+<template>
+  <a-modal
+    :title="modalTitle"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @cancel="handleCancel"
+  >
+    <a-form :form="form">
+      <row-list :col="2">
+        <row-item>
+          <a-form-item
+            label="显示名称"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['label']"/>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="字段名称"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['fieldName']"/>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="类型"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select
+              v-decorator="['type', {rules: [{required: true, message: '类型不能为空'}]}]"
+              placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in typeMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="是否必填"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select
+              v-decorator="['required', {rules: [{required: true, message: '类型不能为空'}]}]"
+              placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in yesNoMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="显示行数"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['rows', {rules: [{required: true, message: '不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="排序"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['sort', {rules: [{required: true, message: '不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="最小长度"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['minLength', {rules: [{required: true, message: '不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="最大长度"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['maxLength', {rules: [{required: true, message: '不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+        <row-item>
+          <a-form-item
+            label="默认值"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['defaultValue']"/>
+          </a-form-item>
+        </row-item>
+      </row-list>
+    </a-form>
+    <title-divider title="下拉选择项明细" width="90px"></title-divider>
+    <div class="table-operator" style="margin-bottom: 8px;">
+      <a-button size="small" type="primary" @click="handleOption">
+        <a-icon type="plus"/>
+        添加
+      </a-button>
+      <a-button class="margin-left8" size="small" type="danger" @click="handleDelOption">
+        <a-icon type="delete"/>
+        删除
+      </a-button>
+    </div>
+    <a-table
+      bordered
+      :data-source="data"
+      :columns="columns"
+      tableLayout="auto"
+      rowKey="name"
+      :row-selection="rowSelection">
+      <span slot="action" slot-scope="record">
+        <template>
+          <a @click="handleOption(record)">修改</a>
+          <a-divider type="vertical" />
+          <a-popconfirm title="是否要删除该条数据?" @confirm="handleDelOption(record.name)">
+            <a>删除</a>
+          </a-popconfirm>
+        </template>
+      </span>
+    </a-table>
+    <template slot="footer">
+      <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
+    </template>
+    <option-form ref="optionForm" @ok="handleOptionList" />
+  </a-modal>
+</template>
+
+<script>
+import OptionForm from './OptionForm'
+import DetailList from '@/components/tools/DetailList'
+import pick from 'lodash.pick'
+import Vue from 'vue'
+export default {
+  name: 'FieldTemplateOptionForm',
+  components: {
+    OptionForm,
+    DetailList
+  },
+  data () {
+    return {
+      confirmLoading: false,
+      modalTitle: null,
+      form: this.$form.createForm(this),
+      visible: false,
+      data: [],
+      // 下拉框map
+      yesNoMap: {},
+      record: {},
+      typeMap: {},
+      rowSelection: {
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.selectedRowKeys = selectedRowKeys
+          this.selectedRows = selectedRows
+        }
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+      options: {
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys
+        }
+      },
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return index + 1
+          }
+        },
+        {
+          title: '参数名称',
+          dataIndex: 'name'
+        },
+        {
+          title: '参数值',
+          dataIndex: 'value'
+        },
+        {
+          title: '操作',
+          key: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ]
+    }
+  },
+  props: {
+  },
+  created () {
+    // 下拉框map
+    this.yesNoMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
+    this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_FILED_TYPE)
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      // 如果是空标识添加
+      this.modalTitle = '字段设置'
+      this.record = record
+      this.data = record.optionList || []
+      const { form: { setFieldsValue } } = this
+      // 日期处理
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign(pick(record, [
+          'label',
+          'fieldName',
+          'type',
+          'required',
+          'sort',
+          'rows',
+          'minLength',
+          'maxLength',
+          'defaultValue'
+        ])))
+      })
+    },
+    save () {
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        values.optionList = this.data
+        this.handleCancel(values)
+      })
+    },
+    handleCancel (values) {
+      this.visible = false
+      this.confirmLoading = false
+      this.data = []
+      this.form.resetFields()
+      console.log(values)
+      if (this.BaseTool.Object.isNotBlank(values)) {
+        console.log(values)
+        this.$emit('ok', values)
+      }
+    },
+    handleOption (record) {
+      if (record == null) {
+        const modal = this.$refs.optionForm
+        modal.base()
+      } else {
+        const modal = this.$refs.optionForm
+        modal.base(record)
+      }
+    },
+    handleOptionList (values) {
+      let dataSource = [...this.data]
+      if (dataSource == null) {
+        dataSource = []
+      }
+      if (values.name == null || values.name === '') {
+        return
+      }
+      let find = false
+      console.log('data.length: ' + dataSource.length)
+      for (let j = 0; j < dataSource.length; j++) {
+        if (values.name === dataSource[j].name) {
+          find = true
+          this.data = dataSource.map(item => {
+            return item.name === values.name ? values : item
+          })
+          break
+        }
+      }
+      if (!find) {
+        dataSource.push(values)
+        console.log('data.length: ' + dataSource.length)
+        this.data = dataSource
+        console.log('data.length: ' + this.data.length)
+      }
+    },
+    handleDelOption (name) {
+      const dataSource = [...this.data]
+      this.data = dataSource.filter(item => item.name !== name)
+    }
+  }
+}
+</script>

+ 280 - 0
src/views/customize/fieldTemplateData/CustomFieldTemplateData.vue

@@ -0,0 +1,280 @@
+<template>
+  <a-card :bordered="false">
+    <div v-show="visible">
+      <div class="table-page-search-wrapper" @keyup.enter="handleEnter">
+        <a-form layout="inline">
+          <a-row :gutter="48" v-show="advanced">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="关键字">
+                <a-input v-model="queryParam.keyword" placeholder="请输入名称/类型名称"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="类型">
+                <a-select
+                  v-model="queryParam.type"
+                  placeholder="请选择">
+                  <a-select-option
+                    v-for="(label,value) in typeMap"
+                    :key="value"
+                    :label="label"
+                    :value="parseInt(value)">{{ label }}
+                  </a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+          </a-row>
+          <a-row :gutter="48">
+            <a-col :md="24 || 24" :sm="24" style="text-align: right">
+              <span class="table-page-search-submitButtons">
+                <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
+                <a-button style="margin-left: 8px" @click="resetSearchForm">重置</a-button>
+                <a @click="()=>{ this.advanced = !this.advanced}" style="margin-left: 8px">
+                  {{ advanced ? '收起' : '展开' }}
+                  <a-icon :type="advanced ? 'up' : 'down'"/>
+                </a>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+
+      <div class="table-operator" style="margin-bottom: 8px;">
+        <a-row>
+          <a-col :md="16">
+            <a-button v-if="$auth('customize-fieldTemplateData-add')" type="primary" icon="plus" @click="handleAdd()">新增</a-button>
+            <a-button style="margin-left: 8px" v-if="$auth('customize-fieldTemplateData-export')" type="primary" icon="download" @click="doExport">导出</a-button>
+            <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('customize-fieldTemplateData-del')">
+              <a-menu slot="overlay">
+                <a-popconfirm title="是否要删除所选数据?" @confirm="batchDelete()">
+                  <a-menu-item key="1"><a-icon type="delete" /><a>删除</a></a-menu-item>
+                </a-popconfirm>
+              </a-menu>
+              <a-button style="margin-left: 8px">
+                批量操作 <a-icon type="down" />
+              </a-button>
+            </a-dropdown>
+          </a-col>
+        </a-row>
+      </div>
+
+      <s-table
+        ref="table"
+        size="default"
+        rowKey="id"
+        :columns="columns"
+        :data="loadData"
+        :alert="options.alert"
+        :rowSelection="options.rowSelection"
+        showPagination="auto"
+      >
+        <span slot="action" slot-scope="record">
+          <template>
+            <a @click="handleView(record)">查看</a>
+            <operation-button
+              v-if="$auth('customize-fieldTemplateData-edit')"
+              @click="handleEdit(record)"
+            >修改</operation-button>
+            <operation-button
+              v-if="$auth('customize-fieldTemplateData-del')"
+              :type="2"
+              title="是否要删除该条数据?"
+              @confirm="batchDelete(record.id)">删除</operation-button>
+          </template>
+        </span>
+      </s-table>
+    </div>
+    <base-form ref="baseModal" @ok="handleOk"/>
+    <detail ref="detailModal" @ok="handleOk"/>
+  </a-card>
+</template>
+
+<script>
+import { STable, Ellipsis } from '@/components'
+import BaseForm from './modules/BaseForm'
+import Detail from './modules/Detail'
+import { getCustomFieldTemplateDataPage, deleteCustomFieldTemplateDatas, fetchCustomFieldTemplateData, exportCustomFieldTemplateData } from '@/api/customize/fieldTemplateData'
+
+export default {
+  name: 'CustomFieldTemplateDataList',
+  components: {
+    STable,
+    Ellipsis,
+    BaseForm,
+    Detail
+  },
+  data () {
+    return {
+      advanced: false,
+      visible: true,
+      // 查询参数
+      queryParam: {
+      },
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          customRender: (text, record, index) => {
+            return `${(this.$refs.table.localPagination.current - 1) * this.$refs.table.localPagination.pageSize + index + 1}`
+          }
+        },
+        {
+          title: '类型',
+          dataIndex: 'type',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Table.getMapText(this.typeMap, text)
+          }
+        },
+        {
+          title: '所属对象id',
+          dataIndex: 'objId'
+        },
+        {
+          title: '模板数据',
+          dataIndex: 'data'
+        },
+        {
+          title: '备注',
+          dataIndex: 'remark'
+        },
+        {
+          title: '创建日期',
+          dataIndex: 'createdTime'
+        },
+        {
+          title: '创建人名称',
+          dataIndex: 'createdUserName'
+        },
+        {
+          title: '操作',
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 下拉框map
+      typeMap: {},
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter = {
+          ...parameter,
+          ...this.queryParam,
+          dataScope: {
+            sortBy: 'desc',
+            sortName: 'update_time'
+          }
+        }
+        return getCustomFieldTemplateDataPage(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.data
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      options: {
+        alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false
+    }
+  },
+  created () {
+    // 下拉框map
+    this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_DATA_TYPE)
+    this.tableOption()
+  },
+  methods: {
+    tableOption () {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: false,
+                name: record.id
+              }
+            })
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    batchDelete (id) {
+      let ids = []
+      if (this.BaseTool.String.isBlank(id)) {
+        const length = this.selectedRows.length
+        if (length === 0) {
+          this.$message.info('请选择要删除的记录')
+          return
+        }
+        ids = this.selectedRows.map(item => item.id)
+      } else {
+        ids = [id]
+      }
+      deleteCustomFieldTemplateDatas(ids).then(res => {
+        this.$message.info('删除成功')
+        this.handleOk()
+        this.$refs.table.clearSelected()
+      })
+    },
+    handleAdd () {
+      this.visible = false
+      const modal = this.$refs.baseModal
+      modal.base()
+    },
+    handleEdit (record) {
+      this.visible = false
+      fetchCustomFieldTemplateData({ id: record.id }).then(res => {
+        const modal = this.$refs.baseModal
+        modal.base(res.data)
+      })
+    },
+    handleView (record) {
+      this.visible = false
+      fetchCustomFieldTemplateData({ id: record.id }).then(res => {
+        const modal = this.$refs.detailModal
+        modal.base(res.data)
+      })
+    },
+    handleOk (values) {
+      this.visible = true
+      this.$refs.table.refresh()
+    },
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    resetSearchForm () {
+      this.queryParam = {
+      }
+      this.$refs.table.refresh(true)
+    },
+    doExport () {
+      const parameter = {
+        ...this.queryParam
+      }
+      exportCustomFieldTemplateData(parameter).then(file => {
+        this.BaseTool.Util.downLoadExportExcel(file)
+      })
+    },
+    handleEnter () {
+      this.$refs.table.refresh(true)
+    }
+  }
+}
+</script>

+ 154 - 0
src/views/customize/fieldTemplateData/modules/BaseForm.vue

@@ -0,0 +1,154 @@
+<template>
+  <a-card :bordered="false" v-show="visible" class="card" :title="modalTitle">
+    <a-row :gutter="48" slot="extra">
+      <a-col :md="48" :sm="48">
+        <span class="table-page-search-submitButtons" style="float: right">
+          <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
+          <a-button style="margin-left: 8px" type="default" @click="handleCancel()">返回</a-button>
+        </span>
+      </a-col>
+    </a-row>
+    <a-form :form="form">
+
+      <a-form-item v-show="false">
+        <a-input v-decorator="['id']" type="hidden"/>
+      </a-form-item>
+
+      <row-list :col="2">
+        <row-item>
+
+          <a-form-item
+            label="类型"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-select
+              v-decorator="['type', {rules: [{required: true, message: '类型不能为空'}]}]"
+              placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in typeMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label="所属对象id"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['objId', {rules: [{required: true, message: '所属对象id不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label="模板数据"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['data', {rules: [{required: true, message: '模板数据不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+        <row-item>
+
+          <a-form-item
+            label="备注"
+            :labelCol="BaseTool.Constant.labelCol"
+            :wrapperCol="BaseTool.Constant.wrapperCol"
+          >
+            <a-input
+              v-decorator="['remark', {rules: [{required: true, message: '备注不能为空'}]}]"/>
+          </a-form-item>
+        </row-item>
+      </row-list>
+    </a-form>
+  </a-card>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+import { addCustomFieldTemplateData, updateCustomFieldTemplateData } from '@/api/customize/fieldTemplateData'
+export default {
+  name: 'BaseCustomFieldTemplateData',
+  data () {
+    return {
+      confirmLoading: false,
+      modalTitle: null,
+      form: this.$form.createForm(this),
+      visible: false,
+      // 下拉框map
+      typeMap: {}
+    }
+  },
+  props: {},
+  created () {
+    // 下拉框map
+    this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_DATA_TYPE)
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      // 如果是空标识添加
+      if (this.BaseTool.Object.isBlank(record)) {
+        this.modalTitle = '添加'
+        return
+      }
+      this.modalTitle = '编辑'
+      const { form: { setFieldsValue } } = this
+      // 日期处理
+      this.$nextTick(() => {
+        setFieldsValue(Object.assign(pick(record, [
+          'id',
+          'type',
+          'objId',
+          'data',
+          'remark'
+        ])))
+      })
+    },
+    save () {
+      const { form: { validateFieldsAndScroll } } = this
+      this.confirmLoading = true
+      validateFieldsAndScroll((errors, values) => {
+        if (errors) {
+          this.confirmLoading = false
+          return
+        }
+        // 日期处理
+        if (this.BaseTool.String.isBlank(values.id)) {
+          addCustomFieldTemplateData(values)
+            .then(() => {
+              this.handleCancel(values)
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+        } else {
+          updateCustomFieldTemplateData(values)
+            .then(() => {
+              this.handleCancel(values)
+            }).catch(() => {
+              this.confirmLoading = false
+            })
+        }
+      })
+    },
+    handleCancel (values) {
+      this.visible = false
+      this.confirmLoading = false
+      this.form.resetFields()
+      if (this.BaseTool.Object.isNotBlank(values)) {
+        this.$emit('ok', values)
+      } else {
+        this.$emit('ok')
+      }
+    }
+  }
+}
+</script>

+ 52 - 63
src/views/sb/oil/modules/SbOilSelectModal.vue → src/views/customize/fieldTemplateData/modules/CustomFieldTemplateDataSelectModal.vue

@@ -11,15 +11,29 @@
       <div class="table-page-search-wrapper">
         <a-form layout="inline">
           <a-row :gutter="48">
-            <a-col :md="8" :sm="24">
+            <a-col :md="6" :sm="24">
               <a-form-item label="关键字">
                 <a-input v-model="queryParam.keyword" placeholder="请输入名称/类型名称"/>
               </a-form-item>
             </a-col>
-            <a-col :md="8 || 24" :sm="24">
+            <a-select
+              v-model="queryParam.type"
+              placeholder="请选择">
+              <a-select-option
+                v-for="(label,value) in typeMap"
+                :key="value"
+                :label="label"
+                :value="parseInt(value)">{{ label }}
+              </a-select-option>
+            </a-select>
+            <a-col :md="6 || 24" :sm="24">
               <span class="table-page-search-submitButtons">
                 <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
                 <a-button style="margin-left: 8px" @click="resetSearchForm">重置</a-button>
+                <a @click="()=>{ this.advanced = !this.advanced}" style="margin-left: 8px">
+                  {{ advanced ? '收起' : '展开' }}
+                  <a-icon :type="advanced ? 'up' : 'down'"/>
+                </a>
               </span>
             </a-col>
           </a-row>
@@ -40,9 +54,9 @@
         :rowSelection="options.rowSelection"
         showPagination="auto"
       >
-        <span slot="action" slot-scope="record">
+        <span slot="action" slot-scope="record1">
           <template>
-            <a @click="handleView(record)">查看</a>
+            <a @click="handleView(record1)">查看</a>
           </template>
         </span>
       </s-table>
@@ -58,10 +72,10 @@
 <script>
 import { STable, Ellipsis } from '@/components'
 import Detail from './Detail'
-import { getSbOilPage, fetchSbOil } from '@/api/sb/oil'
+import { getCustomFieldTemplateDataPage, fetchCustomFieldTemplateData } from '@/api/customize/fieldTemplateData'
 
 export default {
-  name: 'SbOilSelectModal',
+  name: 'CustomFieldTemplateDataSelectModal',
   components: {
     STable,
     Ellipsis,
@@ -71,15 +85,28 @@ export default {
     type: {
       type: String,
       default: 'radio'
+    },
+    selectedRowKey: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    },
+    selectedRow: {
+      type: Array,
+      default: () => {
+        return []
+      }
     }
   },
   data () {
     return {
+      advanced: false,
       confirmLoading: false,
       mdl: {},
       modalTitle: null,
       visible: false,
-      extraModel: {},
+      record: null,
       // 查询参数
       queryParam: {
       },
@@ -95,70 +122,32 @@ export default {
           }
         },
         {
-          title: '设备ID',
-          dataIndex: 'sbId'
-        },
-        {
-          title: '仓库ID',
-          dataIndex: 'storeId'
-        },
-        {
-          title: '申请人',
-          dataIndex: 'userId'
-        },
-        {
-          title: '申请人名称',
-          dataIndex: 'userName'
-        },
-        {
-          title: '处理人',
-          dataIndex: 'storeUserId'
-        },
-        {
-          title: '处理人名称',
-          dataIndex: 'storeUserName'
-        },
-        {
-          title: '状态:1.申请中,2.已处理,3.撤销',
-          dataIndex: 'status',
-          customRender: (text, record, index) => {
-            return this.BaseTool.Object.getField(this.statusMap, text)
-          }
-        },
-        {
-          title: '申请油量',
-          dataIndex: 'applyOil',
+          title: '类型',
+          dataIndex: 'type',
           customRender: (text, record, index) => {
-            return this.BaseTool.Amount.formatter(text)
+            return this.BaseTool.Table.getMapText(this.typeMap, text)
           }
         },
         {
-          title: '实际加油量',
-          dataIndex: 'realOil',
-          customRender: (text, record, index) => {
-            return this.BaseTool.Amount.formatter(text)
-          }
+          title: '所属对象id',
+          dataIndex: 'objId'
         },
         {
-          title: '申请说明',
-          dataIndex: 'applyRemark'
+          title: '模板数据',
+          dataIndex: 'data'
         },
         {
-          title: '执行说明',
-          dataIndex: 'handleRemark'
+          title: '备注',
+          dataIndex: 'remark'
         },
         {
-          title: '说明',
-          dataIndex: 'remark'
+          title: '创建日期',
+          dataIndex: 'createdTime'
         },
         {
           title: '创建人名称',
           dataIndex: 'createdUserName'
         },
-        {
-          title: '创建日期',
-          dataIndex: 'createdTime'
-        },
         {
           title: '操作',
           key: 'action',
@@ -168,7 +157,7 @@ export default {
         }
       ],
       // 下拉框map
-      statusMap: {},
+      typeMap: {},
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         parameter = {
@@ -180,7 +169,7 @@ export default {
             sortName: 'update_time'
           }
         }
-        return getSbOilPage(Object.assign(parameter, this.queryParam))
+        return getCustomFieldTemplateDataPage(Object.assign(parameter, this.queryParam))
           .then(res => {
             return res.data
           })
@@ -201,7 +190,7 @@ export default {
   },
   created () {
     // 下拉框map
-    this.statusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SB_OIL_STATUS)
+    this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_DATA_TYPE)
   },
   methods: {
     tableOption () {
@@ -244,7 +233,7 @@ export default {
       }
     },
     handleView (record) {
-      fetchSbOil({ id: record.id }).then(res => {
+      fetchCustomFieldTemplateData({ id: record.id }).then(res => {
         const modal = this.$refs.detailModal
         modal.base(res.data)
       })
@@ -261,11 +250,11 @@ export default {
       }
       this.$refs.table.refresh(true)
     },
-    base (extraModel, queryParam = {}) {
+    base (record, queryParam = {}) {
       this.visible = true
       this.modalTitle = '选择信息'
       this.extraQueryParam = queryParam
-      this.extraModel = extraModel
+      this.record = record
       if (this.isCreated) {
         this.$refs.table.clearSelected()
         this.options.rowSelection.type = this.type
@@ -284,7 +273,7 @@ export default {
         this.$message.warn('请至少选择一项信息')
       } else {
         this.confirmLoading = true
-        this.$emit('selected', this.extraModel, this.selectedRowKeys, this.selectedRows)
+        this.$emit('selected', this.record, this.selectedRowKeys, this.selectedRows)
         this.confirmLoading = false
         this.visible = false
       }

+ 67 - 0
src/views/customize/fieldTemplateData/modules/Detail.vue

@@ -0,0 +1,67 @@
+<template>
+  <a-card :bordered="false" v-show="visible" class="card" :title="modalTitle">
+    <detail-list title="" :col="2">
+      <detail-list-item term="类型">{{ BaseTool.Object.getField(this.typeMap,model.type) }}</detail-list-item>
+      <detail-list-item term="所属对象id">{{ model.objId }}</detail-list-item>
+      <detail-list-item term="模板数据">{{ model.data }}</detail-list-item>
+      <detail-list-item term="备注">{{ model.remark }}</detail-list-item>
+      <detail-list-item term="更新日期">{{ model.updateTime }}</detail-list-item>
+      <detail-list-item term="创建人">{{ model.createdUserId }}</detail-list-item>
+      <detail-list-item term="更新人">{{ model.updateUserId }}</detail-list-item>
+      <detail-list-item term="更新人名称">{{ model.updateUserName }}</detail-list-item>
+    </detail-list>
+
+    <template slot="footer">
+      <a-button :loading="confirmLoading" type="primary" @click="handleCancel()">返回</a-button>
+    </template>
+  </a-card>
+</template>
+
+<script>
+import DetailList from '@/components/tools/DetailList'
+const DetailListItem = DetailList.Item
+
+export default {
+  name: 'CustomFieldTemplateDataDetail',
+  components: {
+    DetailList,
+    DetailListItem
+  },
+  data () {
+    return {
+      confirmLoading: false,
+      mdl: {},
+      modalTitle: null,
+      visible: false,
+      // 下拉框map
+      typeMap: {},
+      model: {
+        'type': null,
+        'objId': null,
+        'data': null,
+        'remark': null,
+        'updateTime': null,
+        'createdUserId': null,
+        'updateUserId': null,
+        'updateUserName': null
+      }
+    }
+  },
+  created () {
+    // 下拉框map
+
+    this.typeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CUSTOM_FIELD_TEMPLATE_DATA_TYPE)
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      this.modalTitle = '详情'
+      this.model = record
+    },
+    handleCancel () {
+      this.visible = false
+      this.confirmLoading = false
+    }
+  }
+}
+</script>

+ 1 - 1
src/views/customize/report/CustomizeReport.vue

@@ -18,7 +18,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="$auth('customize-reports-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增
       </a-button>
       <a-button

+ 1 - 1
src/views/customize/report/modules/CustomizeReportSelectModal.vue

@@ -26,7 +26,7 @@
                 </a-form>
             </div>
 
-            <div class="table-operator">
+            <div class="table-operator" style="margin-bottom: 8px;">
             </div>
 
             <s-table

+ 379 - 0
src/views/dashboard/StoreReport1.vue

@@ -0,0 +1,379 @@
+<template>
+  <div class="page-header-index-wide">
+    <a-card title="仓库出库入库数据月统计报表" :loading="loading" v-show="visible" :bordered="false" :body-style="{padding: '0'}">
+      <div class="salesCard">
+        <a-tabs default-active-key="1" size="large" :tab-bar-style="{marginBottom: '24px', paddingLeft: '16px'}">
+          <div class="extra-wrapper" slot="tabBarExtraContent">
+            <a-row>
+              <a-col :md="3" :sm="24">
+                <a-month-picker
+                  style="margin-left: 8px"
+                  :default-value="moment(defaultStartMonth, monthFormat)"
+                  :format="monthFormat"
+                  v-model="queryParam.startMonth"
+                  placeholder="开始月份"
+                  @change="onStartChange" /></a-col>
+              <a-col :md="3" :sm="24">
+                <a-month-picker
+                  style="margin-left: 8px"
+                  :default-value="moment(defaultEndMonth, monthFormat)"
+                  :format="monthFormat"
+                  v-model="queryParam.endMonth"
+                  placeholder="结束月份"
+                  @change="onEndChange" /></a-col>
+
+              <a-col :md="6" :sm="24">
+                <a-tree-select
+                  style="width: 100%"
+                  :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
+                  :treeData="storeTreeData"
+                  :treeNodeFilterProp="'name'"
+                  :showSearch="true"
+                  v-decorator="['storeId']"
+                  v-model="queryParam.storeId"
+                  placeholder="仓库类型"
+                >
+                </a-tree-select>
+              </a-col>
+              <a-col :md="2" :sm="24">
+                <a-button style="margin-left: 8px" type="default" @click="getData()">查询</a-button>
+              </a-col>
+              <a-col :md="2" :sm="24">
+                <a-button style="margin-left: 8px" type="primary" @click="handlePrint()">打印</a-button>
+              </a-col>
+              <a-col :md="2" :sm="24">
+                <a-button style="margin-left: 8px" type="primary" @click="doExport()">导出</a-button>
+              </a-col>
+            </a-row>
+          </div>
+          <a-tab-pane loading="true" tab="图形统计" key="1">
+            <a-row>
+              <a-col :xl="24" :lg="24" :md="24" :sm="24" :xs="24">
+                <div style="padding: 10px">
+                  <div id="container"></div>
+                </div>
+              </a-col>
+            </a-row>
+          </a-tab-pane>
+          <a-tab-pane loading="true" tab="表格统计" key="2">
+            <a-row>
+              <a-col :xl="24" :lg="24" :md="24" :sm="24" :xs="24">
+                <div style="padding: 10px">
+                  <a-table
+                    bordered
+                    :data-source="chartsData"
+                    :columns="columns"
+                    tableLayout="auto"
+                    :scroll="{x: 1, y: BaseTool.Constant.scrollY }"
+                    rowKey="month">
+                    <span slot="action" slot-scope="record">
+                      <template>
+                        <a @click="handleView(record,1)">入库明细</a>
+                        <a-divider type="vertical" />
+                        <a @click="handleView(record,2)">出库明细</a>
+
+                        <a-divider type="vertical" />
+                        <a @click="doExportDetail(record,1)">导出入库明细</a>
+                        <a-divider type="vertical" />
+                        <a @click="doExportDetail(record,2)">导出出库明细</a>
+
+                      </template>
+                    </span>
+                  </a-table>
+                </div>
+              </a-col>
+            </a-row>
+          </a-tab-pane>
+        </a-tabs>
+      </div>
+    </a-card>
+    <print-in-store ref="basePrintModal" @ok="handleOk"/>
+    <detail-in-store-report ref="inStoreModal" @ok="handleOk"/>
+    <detail-out-store-report ref="outStoreModal" @ok="handleOk"/>
+  </div>
+</template>
+
+<script>
+import { getStoreMonthReport, exportMonthReport1, exportMonthReportMonth1 } from '@/api/report/check-job'
+import { Chart } from '@antv/g2'
+import PrintInStore from '@/views/dashboard/modules/PrintInStoreInAndOutReport'
+import DetailCheckJobReport from '@/views/dashboard/modules/DetailCheckJobReport'
+import DetailInStoreReport from '@/views/dashboard/modules/DetailInStoreReport'
+import DetailOutStoreReport from '@/views/dashboard/modules/DetailOutStoreReport'
+
+import moment from 'moment'
+import { fetchStoreTree } from '@/api/store/store'
+
+export default {
+  name: 'Analysis',
+  components: {
+    DetailOutStoreReport,
+    DetailInStoreReport,
+    PrintInStore,
+    Chart,
+    DetailCheckJobReport
+  },
+  props: {
+    title: {
+      type: String,
+      default: '仓库出库入库数据月统计报表'
+    }
+  },
+  data () {
+    return {
+      storeTreeData: [],
+      queryParam: {
+        startMonth: this.BaseTool.Moment().format(this.BaseTool.Date.PICKER_NORM_YEAR) + '-01-01',
+        endMonth: this.BaseTool.Moment().format(this.BaseTool.Date.PICKER_NORM_YEAR) + '-12-01',
+        storeId: null,
+        searchStartTime: null,
+        searchEndTime: null,
+        filter: this.filter
+      },
+      loading: false,
+      serverData: [],
+      sbLevelMap: {},
+      treeData: [],
+      monthFormat: 'YYYY-MM',
+      defaultStartMonth: this.BaseTool.Moment().format(this.BaseTool.Date.PICKER_NORM_YEAR) + '-01',
+      defaultEndMonth: this.BaseTool.Moment().format(this.BaseTool.Date.PICKER_NORM_YEAR) + '-12',
+      years: [],
+      levelMap: {},
+      visible: true,
+      chart: null, // 创建一个chart变量
+      chartsData: [],
+      // 表头
+      columns: [
+        {
+          title: '月份',
+          width: 180,
+          dataIndex: 'month'
+        },
+        {
+          title: '入库数量',
+          width: 120,
+          dataIndex: 'inStoreNum'
+        },
+        {
+          title: '出库数量',
+          width: 120,
+          dataIndex: 'outStoreNum'
+        },
+        {
+          title: '入库金额',
+          width: 120,
+          dataIndex: 'inStorePrice',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '出库金额',
+          width: 120,
+          dataIndex: 'outStorePrice',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '操作',
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ]
+    }
+  },
+  created () {
+    this.tableOption()
+    this.setTree()
+  },
+  mounted () {
+    this.$nextTick(function () {
+      this.getData()
+    })
+  },
+  methods: {
+    tableOption () {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: true,
+                name: record.id
+              }
+            })
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    setTree () {
+      fetchStoreTree().then(res => {
+        this.storeTreeData = res.data
+      })
+    },
+    moment,
+    changeLevel (value) {
+      this.queryParam.standardLevel = value
+      this.getData()
+    },
+    onStartChange (date, dateString) {
+      this.$nextTick(() => {
+        this.queryParam.startMonth = this.BaseTool.Date.formatter(dateString + '-01', this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+      })
+    },
+    onEndChange (date, dateString) {
+      this.queryParam.endMonth = this.BaseTool.Date.formatter(dateString + '-01', this.BaseTool.Date.PICKER_NORM_DATE_PATTERN)
+    },
+    getData () {
+      if (this.queryParam.startMonth == null) {
+        this.$message.error('请选择起始月份')
+        return
+      }
+      if (this.queryParam.endMonth == null) {
+        this.$message.error('请选择结束月份')
+        return
+      }
+      for (var i = 0; i < this.storeTreeData.length; i++) {
+        if (this.queryParam.storeId === this.storeTreeData[i].id) {
+          alert('立体仓和货架没有数据')
+          return
+        }
+      }
+      getStoreMonthReport(this.queryParam)
+        .then(res => {
+          this.chartsData = res.data
+
+          // 需要将数据分组:总数,完成数
+          const groupData = []
+          this.chartsData.forEach(function (data) {
+            groupData.push({ name: '入库数量', month: data.month + '', num: data.inStoreNum })
+            groupData.push({ name: '出库数量', month: data.month + '', num: data.outStoreNum })
+          })
+          this.getCharts('container', groupData)// 调用统计图
+        })
+    },
+    getCharts (id, data) {
+      this.chart && this.chart.destroy()// 防止点击搜索按钮新增一个
+      this.chart = new Chart({
+        container: 'container',
+        autoFit: true,
+        height: 400
+      })
+      this.chart.data(data)
+      this.chart.scale('num', {
+        nice: true
+      })
+      this.chart.tooltip({
+        showMarkers: false,
+        shared: true
+      })
+      this.chart.interval().position('month*num').color('name').adjust([
+        {
+          type: 'dodge',
+          marginRatio: 0
+        }
+      ])
+      this.chart.interaction('active-region')
+      this.chart.legend({
+        position: 'bottom'
+      })
+      this.chart.render()
+    },
+    doExport () {
+      const parameter = {
+        ...this.queryParam
+      }
+      exportMonthReport1(parameter).then(file => {
+        this.BaseTool.UPLOAD.downLoadExportExcel(file)
+      })
+    },
+    doExportDetail (record, number) {
+      const parameter = {
+        ...this.queryParam,
+        month: record.month,
+        year: record.year,
+        number: number
+      }
+      exportMonthReportMonth1(parameter).then(file => {
+        this.BaseTool.UPLOAD.downLoadExportExcel(file)
+      })
+    },
+    handlePrint (record) {
+      const modal = this.$refs.basePrintModal
+      this.visible = false
+      modal.base({ startMonth: this.queryParam.startMonth, endMonth: this.queryParam.endMonth, title: this.title, data: this.chartsData })
+    },
+    handleView (record, number) {
+      let modal
+      if (number === 1) {
+        modal = this.$refs.inStoreModal
+      } else {
+        modal = this.$refs.outStoreModal
+      }
+      console.log(record)
+      modal.base(record)
+    },
+    handleOk () {
+      this.visible = true
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.extra-wrapper {
+  line-height: 55px;
+  padding-right: 24px;
+
+  .extra-item {
+    display: inline-block;
+    margin-right: 24px;
+
+    a {
+      margin-left: 24px;
+    }
+  }
+}
+
+.antd-pro-pages-dashboard-analysis-twoColLayout {
+  position: relative;
+  display: flex;
+  display: block;
+  flex-flow: row wrap;
+}
+
+.antd-pro-pages-dashboard-analysis-salesCard {
+  height: calc(100% - 24px);
+  /deep/ .ant-card-head {
+    position: relative;
+  }
+}
+
+.dashboard-analysis-iconGroup {
+  i {
+    margin-left: 16px;
+    color: rgba(0,0,0,.45);
+    cursor: pointer;
+    transition: color .32s;
+    color: black;
+  }
+}
+.analysis-salesTypeRadio {
+  position: absolute;
+  right: 54px;
+  bottom: 12px;
+}
+</style>

+ 170 - 0
src/views/dashboard/modules/DetailInStoreReport.vue

@@ -0,0 +1,170 @@
+<template>
+  <a-modal
+    :title="modalTitle"
+    :width="1200"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @cancel="handleCancel"
+  >
+    <title-divider title="入库明细列表" width="90px"></title-divider>
+    <a-table
+      bordered
+      :data-source="data"
+      :columns="columns"
+      :scroll="{x: 1000, y: BaseTool.Constant.scrollY}"
+      tableLayout="auto"
+      rowKey="id"
+    >
+      <span slot="action" slot-scope="record">
+        <template>
+          <a @click="handleView(record)">查看</a>
+        </template>
+      </span>
+      <span slot="status" slot-scope="text">
+        <badge
+          :text="BaseTool.Object.getField(statusMap,text)"
+          :status="DictCache.COLOR.REPAIR_APPLICATION_FORM_STATUS[text]" />
+      </span>
+    </a-table>
+    <template slot="footer">
+      <a-button :loading="confirmLoading" type="primary" @click="handleCancel()">返回</a-button>
+    </template>
+    <detail :check-type="2" ref="detailModal"/>
+  </a-modal>
+</template>
+
+<script>
+import DetailList from '@/components/tools/DetailList'
+import Detail from '@/views/check/checkjob/modules/Detail'
+import { fetchCheckJob } from '@/api/check/checkjob'
+
+const DetailListItem = DetailList.Item
+
+export default {
+  name: 'DetailRepairReport',
+  components: {
+    DetailList,
+    DetailListItem,
+    Detail
+  },
+  data () {
+    return {
+      confirmLoading: false,
+      mdl: {},
+      modalTitle: null,
+      visible: false,
+      // 下拉框map
+      typeMap: {},
+      statusMap: {},
+      model: {},
+      // 查询参数
+      queryParam: {
+        filter: this.filter,
+        searchType: this.searchType
+      },
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          checked: true,
+          width: '70px',
+          customRender: (text, record, index) => {
+            return `${index + 1}`
+          }
+        },
+        {
+          title: '入库单号',
+          dataIndex: 'inNo',
+          checked: true,
+          width: '150px'
+        },
+        {
+          title: '备件规格',
+          dataIndex: 'ggxh',
+          checked: true,
+          width: '200px'
+        },
+        {
+          title: '原厂编号',
+          dataIndex: 'initNo',
+          checked: true,
+          width: '150px'
+        },
+        {
+          title: '备件名称',
+          dataIndex: 'spareId',
+          width: '100px',
+          checked: true,
+          customRender: (text, record, index) => {
+            return record.spareName
+          }
+        },
+        {
+          title: '入库数量',
+          dataIndex: 'num',
+          checked: true,
+          width: '200px'
+        },
+        {
+          title: '入库单价',
+          dataIndex: 'price',
+          checked: true,
+          width: '150px',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '入库总价',
+          dataIndex: 'totalPrice',
+          checked: true,
+          width: '150px',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '入库日期',
+          dataIndex: 'createdTime',
+          checked: true,
+          width: '200px'
+        }
+      ],
+      // 下拉框map
+      levelMap: {},
+      standardLevelMap: {},
+      sbStatusMap: {},
+      periodTypeMap: {},
+      data: []
+    }
+  },
+  created () {
+    // 下拉框map
+    this.statusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_JOB_STATUS)
+    this.sbStatusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
+    this.periodTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_PLAN_PERIOD_TYPE)
+    this.levelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SBINFO_LEVEL)
+    this.standardLevelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_PLAN_LEVEL)
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      this.modalTitle = '详情'
+      this.model = record
+      this.data = record.inDetailList
+      console.log(this.data)
+    },
+    handleCancel () {
+      this.visible = false
+      this.confirmLoading = false
+    },
+    handleView (record) {
+      fetchCheckJob({ id: record.id }).then(res => {
+        const modal = this.$refs.detailModal
+        modal.base(res.data)
+      })
+    }
+  }
+}
+</script>

+ 169 - 0
src/views/dashboard/modules/DetailOutStoreReport.vue

@@ -0,0 +1,169 @@
+<template>
+  <a-modal
+    :title="modalTitle"
+    :width="1200"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @cancel="handleCancel"
+  >
+    <title-divider title="明细列表" width="90px"></title-divider>
+    <a-table
+      bordered
+      :data-source="data"
+      :columns="columns"
+      :scroll="{x: 1000, y: BaseTool.Constant.scrollY}"
+      tableLayout="auto"
+      rowKey="id"
+    >
+      <span slot="action" slot-scope="record">
+        <template>
+          <a @click="handleView(record)">查看</a>
+        </template>
+      </span>
+      <span slot="status" slot-scope="text">
+        <badge
+          :text="BaseTool.Object.getField(statusMap,text)"
+          :status="DictCache.COLOR.REPAIR_APPLICATION_FORM_STATUS[text]" />
+      </span>
+    </a-table>
+    <template slot="footer">
+      <a-button :loading="confirmLoading" type="primary" @click="handleCancel()">返回</a-button>
+    </template>
+    <detail :check-type="2" ref="detailModal"/>
+  </a-modal>
+</template>
+
+<script>
+import DetailList from '@/components/tools/DetailList'
+import Detail from '@/views/check/checkjob/modules/Detail'
+import { fetchCheckJob } from '@/api/check/checkjob'
+
+const DetailListItem = DetailList.Item
+
+export default {
+  name: 'DetailRepairReport',
+  components: {
+    DetailList,
+    DetailListItem,
+    Detail
+  },
+  data () {
+    return {
+      confirmLoading: false,
+      mdl: {},
+      modalTitle: null,
+      visible: false,
+      // 下拉框map
+      typeMap: {},
+      statusMap: {},
+      model: {},
+      // 查询参数
+      queryParam: {
+        filter: this.filter,
+        searchType: this.searchType
+      },
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          checked: true,
+          width: '70px',
+          customRender: (text, record, index) => {
+            return `${index + 1}`
+          }
+        },
+        {
+          title: '出库单号',
+          dataIndex: 'outNo',
+          checked: true,
+          width: '150px'
+        },
+        {
+          title: '备件规格',
+          dataIndex: 'ggxh',
+          checked: true,
+          width: '200px'
+        },
+        {
+          title: '原厂编号',
+          dataIndex: 'initNo',
+          checked: true,
+          width: '150px'
+        },
+        {
+          title: '备件名称',
+          dataIndex: 'spareId',
+          width: '100px',
+          checked: true,
+          customRender: (text, record, index) => {
+            return record.spareName
+          }
+        },
+        {
+          title: '出库数量',
+          dataIndex: 'num',
+          checked: true,
+          width: '200px'
+        },
+        {
+          title: '出库单价',
+          dataIndex: 'price',
+          checked: true,
+          width: '150px',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '出库总价',
+          dataIndex: 'totalPrice',
+          checked: true,
+          width: '150px',
+          customRender: (text, record, index) => {
+            return this.BaseTool.Amount.formatter(text)
+          }
+        },
+        {
+          title: '出库日期',
+          dataIndex: 'createdTime',
+          checked: true,
+          width: '200px'
+        }
+      ],
+      // 下拉框map
+      levelMap: {},
+      standardLevelMap: {},
+      sbStatusMap: {},
+      periodTypeMap: {},
+      data: []
+    }
+  },
+  created () {
+    // 下拉框map
+    this.statusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_JOB_STATUS)
+    this.sbStatusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.YES_NO)
+    this.periodTypeMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_PLAN_PERIOD_TYPE)
+    this.levelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SBINFO_LEVEL)
+    this.standardLevelMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.CHECK_PLAN_LEVEL)
+  },
+  methods: {
+    base (record) {
+      this.visible = true
+      this.modalTitle = '详情'
+      this.model = record
+      this.data = record.outDetailList
+    },
+    handleCancel () {
+      this.visible = false
+      this.confirmLoading = false
+    },
+    handleView (record) {
+      fetchCheckJob({ id: record.id }).then(res => {
+        const modal = this.$refs.detailModal
+        modal.base(res.data)
+      })
+    }
+  }
+}
+</script>

+ 1 - 1
src/views/dashboard/modules/PrintInCheckJobReport.vue

@@ -10,7 +10,7 @@
     </a-row>
     <div class="container" id="print-container2">
       <div class="text-center" style="position:relative;font-size:20px;font-weight:bold">
-        Hitachi<br/> 保养任务月统计报表
+        乾元坤和<br/> 保养任务月统计报表
       </div>
       <div>
         <div class="col-md-4 text-center" style="padding: 0">统计周期: {{ record.startMonth }} 至 {{ record.endMonth }}</div>

+ 1 - 1
src/views/dashboard/modules/PrintInCheckJobReportWeek.vue

@@ -10,7 +10,7 @@
     </a-row>
     <div class="container" id="print-container2">
       <div class="text-center" style="position:relative;font-size:20px;font-weight:bold">
-        Hitachi<br/> 保养任务每月统计报表
+        乾元坤和<br/> 保养任务每月统计报表
       </div>
       <div>
         <div class="col-md-4 text-center" style="padding: 0">统计年份: {{ record.year }}</div>

+ 1 - 1
src/views/dashboard/modules/PrintInRepairReport.vue

@@ -10,7 +10,7 @@
     </a-row>
     <div class="container" id="print-container2">
       <div class="text-center" style="position:relative;font-size:20px;font-weight:bold">
-        Hitachi<br/> {{ record.title }}
+        乾元坤和<br/> {{ record.title }}
       </div>
       <div>
         <div class="col-md-4 text-center" style="padding: 0">统计周期: {{ record.startMonth }} 至 {{ record.endMonth }}</div>

+ 1 - 1
src/views/dashboard/modules/PrintInRepairReportFee.vue

@@ -10,7 +10,7 @@
     </a-row>
     <div class="container" id="print-container2">
       <div class="text-center" style="position:relative;font-size:20px;font-weight:bold">
-        Hitachi<br/> {{ record.title }}
+        乾元坤和<br/> {{ record.title }}
       </div>
       <div>
         <div class="col-md-4 text-center" style="padding: 0">统计周期: {{ record.startMonth }} 至 {{ record.endMonth }}</div>

+ 1 - 1
src/views/dashboard/modules/PrintInRepairReportMttr.vue

@@ -10,7 +10,7 @@
     </a-row>
     <div class="container" id="print-container2">
       <div class="text-center" style="position:relative;font-size:20px;font-weight:bold">
-        Hitachi<br/> {{ record.title }}
+        乾元坤和<br/> {{ record.title }}
       </div>
       <div>
         <div class="col-md-4 text-center" style="padding: 0">统计周期: {{ record.startMonth }} 至 {{ record.endMonth }}</div>

+ 231 - 0
src/views/dashboard/modules/PrintInStoreInAndOutReport.vue

@@ -0,0 +1,231 @@
+<template>
+  <div class="print-content" v-show="visible">
+    <a-row :gutter="48" slot="extra">
+      <a-col :md="48" :sm="48">
+        <span class="table-page-search-submitButtons" style="float: right">
+          <a-button type="primary" v-print="'#print-container2'" :disabled="disabled">打印</a-button>
+          <a-button style="margin-left: 8px" @click="handleCancel()">返回列表</a-button>
+        </span>
+      </a-col>
+    </a-row>
+    <div class="container" id="print-container2">
+      <div class="text-center" style="position:relative;font-size:20px;font-weight:bold">
+        乾元坤和<br/> 出库入库数据月统计报表
+      </div>
+      <div>
+        <div class="col-md-4 text-center" style="padding: 0">统计周期: {{ record.startMonth }} 至 {{ record.endMonth }}</div>
+      </div>
+      <table class="gridtable list">
+        <tbody>
+          <tr>
+            <td class="text-center">月份</td>
+            <td class="text-center">入库数量</td>
+            <td class="text-center">入库金额</td>
+            <td class="text-center">出库数量</td>
+            <td class="text-center">出库金额</td>
+          </tr>
+          <tr :key="index" v-for="(item,index) in items">
+            <td class="text-center">{{ item.month}}</td>
+            <td class="text-center">{{ item.inStoreNum }}</td>
+            <td class="text-center">{{ item.inStorePrice }}</td>
+            <td class="text-center">{{ item.outStoreNum }}</td>
+            <td class="text-center">{{ item.outStorePrice }}</td>
+          </tr>
+        </tbody>
+      </table>
+      <div class="row">
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { formatDate } from '@/utils/util'
+
+export default {
+  name: 'PrintCheckJobReport',
+  components: { },
+  data () {
+    return {
+      visible: false,
+      disabled: true,
+      record: {},
+      count: 0,
+      items: [],
+      user: this.$store.getters.userInfo
+      // 下拉框map
+    }
+  },
+  props: {},
+  created () {
+    // 下拉框map
+  },
+  computed: {
+  },
+  methods: {
+    base (record) {
+      this.disabled = true
+      this.visible = true
+      this.record = record
+      this.items = record.data
+      console.log(this.items)
+      this.disabled = false
+    },
+    formatDateEn (value) {
+      return formatDate(new Date(value), 'yyyy-MM-dd')
+    },
+    handleCancel (values) {
+      this.visible = false
+      this.$emit('ok', values)
+    }
+  }
+}
+</script>
+<style media=print>
+/* 应用这个样式的在打印时隐藏 */
+.noPrint {
+  display: none;
+}
+
+/* 应用这个样式的,从那个标签结束开始另算一页,之后在遇到再起一页,以此类推 */
+.page {
+  page-break-after: always;
+}
+</style>
+<style>
+.print-content{
+  width: 1123px;
+  background-color: #fff;
+}
+
+#print-container2 * {
+  font-family: SimHei !important;
+  color: #333447;
+  line-height: 1.5;
+}
+
+.container {
+  width: 95%;
+  padding-right: 15px;
+  padding-left: 15px;
+  margin-right: auto;
+  margin-left: auto;
+}
+
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+  position: relative;
+  min-height: 1px;
+  padding-right: 15px;
+  padding-left: 15px;
+}
+
+.text-left {
+  text-align: left;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.text-center {
+  text-align: center;
+}
+
+table.gridtable {
+  width: 100%;
+  font-family: verdana, arial, sans-serif;
+  font-size: 11px;
+  color: #333333;
+  border-width: 1px;
+  border-color: #666666;
+  border-collapse: collapse;
+}
+
+table.gridtable th {
+  border-width: 1px;
+  padding: 8px;
+  border-style: solid;
+  border-color: #666666;
+  background-color: #dedede;
+}
+
+table.gridtable td {
+  border-width: 1px;
+  padding: 8px;
+  border-style: solid;
+  border-color: #666666;
+  background-color: #ffffff;
+}
+
+table.content td {
+  height: 95px;
+}
+
+.row {
+  margin-right: -15px;
+  margin-left: -15px;
+}
+
+.container:before,
+.container:after,
+.row:before, .row:after {
+  display: table;
+  content: " ";
+}
+
+.container:after, .row:after {
+  clear: both;
+}
+
+.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+  float: left;
+}
+
+.col-md-12 {
+  width: 100%;
+}
+
+.col-md-11 {
+  width: 91.66666667%;
+}
+
+.col-md-10 {
+  width: 83.33333333%;
+}
+
+.col-md-9 {
+  width: 75%;
+}
+
+.col-md-8 {
+  width: 66.66666667%;
+}
+
+.col-md-7 {
+  width: 58.33333333%;
+}
+
+.col-md-6 {
+  width: 50%;
+}
+
+.col-md-5 {
+  width: 41.66666667%;
+}
+
+.col-md-4 {
+  width: 33.33333333%;
+}
+
+.col-md-3 {
+  width: 25%;
+}
+
+.col-md-2 {
+  width: 16.66666667%;
+}
+
+.col-md-1 {
+  width: 8.33333333%;
+}
+</style>

+ 1 - 1
src/views/download/DownloadModal.vue

@@ -6,7 +6,7 @@
     :confirmLoading="confirmLoading"
     @cancel="handleCancel"
   >
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button type="primary" icon="download" @click="downloadAll()">下载全部</a-button>
     </div>
     <a-table :columns="columns" :dataSource="data">

+ 0 - 16
src/views/dz/InStoreFormDZ.vue

@@ -1,16 +0,0 @@
-<template>
-  <InStoreForm :filter="-1"/>
-</template>
-
-<script>
-import InStoreForm from '@/views/store/instoreform/InStoreForm'
-export default {
-  name: 'InStoreFormDZ',
-  components: {
-    InStoreForm
-  }
-}
-</script>
-
-<style scoped>
-</style>

+ 0 - 17
src/views/dz/OutStoreFormDZ.vue

@@ -1,17 +0,0 @@
-<template>
-  <OutStoreForm :filter="-1"/>
-</template>
-
-<script>
-import OutStoreForm from '@/views/store/outstoreform/OutStoreForm'
-export default {
-  name: 'OutStoreFormDZ',
-  components: {
-    OutStoreForm
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 17
src/views/dz/SpareBackFormDZ.vue

@@ -1,17 +0,0 @@
-<template>
-  <SpareBackForm :filter="-1"/>
-</template>
-
-<script>
-import SpareBackForm from '@/views/store/sparebackform/SpareBackForm'
-export default {
-  name: 'SpareBackFormDZ',
-  components: {
-    SpareBackForm
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 17
src/views/dz/SparePickFormDZ.vue

@@ -1,17 +0,0 @@
-<template>
-  <SparePickForm :filter="-1"/>
-</template>
-
-<script>
-import SparePickForm from '@/views/store/sparepickform/SparePickForm'
-export default {
-  name: 'SparePickFormDZ',
-  components: {
-    SparePickForm
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 17
src/views/dz/TransferStoreFormDZ.vue

@@ -1,17 +0,0 @@
-<template>
-  <TransferStoreForm :filter="-1"/>
-</template>
-
-<script>
-import TransferStoreForm from '@/views/store/transferstoreform/TransferStoreForm'
-export default {
-  name: 'TransferStoreFormDZ',
-  components: {
-    TransferStoreForm
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 1 - 1
src/views/fill/execute/FillExecute.vue

@@ -18,7 +18,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="$auth('fill-executes-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button style="margin-left: 8px" v-if="$auth('fill-executes-export')" type="primary" icon="download" @click="doExport">导出</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('fill-executes-del')">

+ 1 - 1
src/views/fill/execute/modules/FillExecuteSelectModal.vue

@@ -26,7 +26,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 1 - 1
src/views/fill/gather-info/FillGatherInfo.vue

@@ -18,7 +18,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="$auth('fill-gather-infos-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button style="margin-left: 8px" v-if="$auth('fill-gather-infos-export')" type="primary" icon="download" @click="doExport">导出</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('fill-gather-infos-del')">

+ 1 - 1
src/views/fill/gather-info/modules/FillGatherInfoSelectModal.vue

@@ -27,7 +27,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
         <a-button v-if="$auth('fill-gathers-edit')" type="primary" icon="plus" @click="addFillInfos">新增</a-button>
       </div>
 

+ 1 - 1
src/views/fill/gather/FillGather.vue

@@ -18,7 +18,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="$auth('fill-gathers-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button style="margin-left: 8px" v-if="$auth('fill-gathers-export')" type="primary" icon="download" @click="doExport">导出</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('fill-gathers-del')">

+ 1 - 1
src/views/fill/gather/modules/FillGatherSelectModal.vue

@@ -26,7 +26,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 1 - 1
src/views/fill/info/FillInfo.vue

@@ -74,7 +74,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="$auth('fill-infos-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button style="margin-left: 8px" v-if="$auth('fill-infos-export')" type="primary" icon="download" @click="doExport">导出</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('fill-infos-del')">

+ 1 - 1
src/views/fill/info/modules/FillInfoSelectModal.vue

@@ -82,7 +82,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 1 - 1
src/views/fill/project-quantity/FillProjectQuantity.vue

@@ -45,7 +45,7 @@
           </a-form>
         </div>
 
-        <div class="table-operator">
+        <div class="table-operator" style="margin-bottom: 8px;">
           <a-button v-if="$auth('fill-project-quantities-add')" type="primary" icon="plus" @click="$refs.baseModal.base({}, {parentItem: selectedItem})">新增</a-button>
           <a-button style="margin-left: 8px" v-if="$auth('fill-project-quantities-export')" type="primary" icon="download" @click="doExport">导出</a-button>
           <a-button style="margin-left: 8px" type="primary" icon="download" @click="doImport">导入</a-button>

+ 1 - 1
src/views/fill/project-quantity/modules/FillProjectQuantitySelectModal.vue

@@ -26,7 +26,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 1 - 1
src/views/firm/producer/FirmProducer.vue

@@ -18,7 +18,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="$auth('firm-producers-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button style="margin-left: 8px" v-if="$auth('firm-producers-export')" type="primary" icon="download" @click="doExport">导出</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('firm-producers-del')">

+ 1 - 1
src/views/firm/producer/modules/FirmProducerSelectModal.vue

@@ -26,7 +26,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 1 - 1
src/views/firm/supplier/FirmSupplier.vue

@@ -18,7 +18,7 @@
       </a-form>
     </div>
 
-    <div class="table-operator">
+    <div class="table-operator" style="margin-bottom: 8px;">
       <a-button v-if="$auth('firm-suppliers-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>
       <a-button style="margin-left: 8px" v-if="$auth('firm-suppliers-export')" type="primary" icon="download" @click="doExport">导出</a-button>
       <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0 && $auth('firm-suppliers-del')">

+ 1 - 1
src/views/firm/supplier/modules/FirmSupplierSelectModal.vue

@@ -26,7 +26,7 @@
         </a-form>
       </div>
 
-      <div class="table-operator">
+      <div class="table-operator" style="margin-bottom: 8px;">
       </div>
 
       <s-table

+ 0 - 138
src/views/form/BasicForm.vue

@@ -1,138 +0,0 @@
-<template>
-  <a-card :body-style="{padding: '24px 32px'}" :bordered="false">
-    <a-form @submit="handleSubmit" :form="form">
-      <a-form-item
-        label="标题"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
-        <a-input
-          v-decorator="[
-            'name',
-            {rules: [{ required: true, message: '请输入标题' }]}
-          ]"
-          name="name"
-          placeholder="给目标起个名字" />
-      </a-form-item>
-      <a-form-item
-        label="起止日期"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
-        <a-range-picker
-          name="buildTime"
-          style="width: 100%"
-          v-decorator="[
-            'buildTime',
-            {rules: [{ required: true, message: '请选择起止日期' }]}
-          ]" />
-      </a-form-item>
-      <a-form-item
-        label="目标描述"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
-        <a-textarea
-          rows="4"
-          placeholder="请输入你阶段性工作目标"
-          v-decorator="[
-            'description',
-            {rules: [{ required: true, message: '请输入目标描述' }]}
-          ]" />
-      </a-form-item>
-      <a-form-item
-        label="衡量标准"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
-        <a-textarea
-          rows="4"
-          placeholder="请输入衡量标准"
-          v-decorator="[
-            'type',
-            {rules: [{ required: true, message: '请输入衡量标准' }]}
-          ]" />
-      </a-form-item>
-      <a-form-item
-        label="客户"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }">
-        <a-input
-          placeholder="请描述你服务的客户,内部客户直接 @姓名/工号"
-          v-decorator="[
-            'customer',
-            {rules: [{ required: true, message: '请描述你服务的客户' }]}
-          ]" />
-      </a-form-item>
-      <a-form-item
-        label="邀评人"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }"
-        :required="false"
-      >
-        <a-input placeholder="请直接 @姓名/工号,最多可邀请 5 人" />
-      </a-form-item>
-      <a-form-item
-        label="权重"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }"
-        :required="false"
-      >
-        <a-input-number :min="0" :max="100" />
-        <span> %</span>
-      </a-form-item>
-      <a-form-item
-        label="目标公开"
-        :labelCol="{lg: {span: 7}, sm: {span: 7}}"
-        :wrapperCol="{lg: {span: 10}, sm: {span: 17} }"
-        :required="false"
-        help="客户、邀评人默认被分享"
-      >
-        <a-radio-group v-model="value">
-          <a-radio :value="1">公开</a-radio>
-          <a-radio :value="2">部分公开</a-radio>
-          <a-radio :value="3">不公开</a-radio>
-        </a-radio-group>
-        <a-form-item>
-          <a-select mode="multiple" v-if="value === 2">
-            <a-select-option value="4">同事一</a-select-option>
-            <a-select-option value="5">同事二</a-select-option>
-            <a-select-option value="6">同事三</a-select-option>
-          </a-select>
-        </a-form-item>
-      </a-form-item>
-      <a-form-item
-        :wrapperCol="{ span: 24 }"
-        style="text-align: center"
-      >
-        <a-button htmlType="submit" type="primary">提交</a-button>
-        <a-button style="margin-left: 8px">保存</a-button>
-      </a-form-item>
-    </a-form>
-  </a-card>
-</template>
-
-<script>
-export default {
-  name: 'BaseForm',
-  data () {
-    return {
-      description: '表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。',
-      value: 1,
-
-      // form
-      form: this.$form.createForm(this)
-
-    }
-  },
-  methods: {
-
-    // handler
-    handleSubmit (e) {
-      e.preventDefault()
-      this.form.validateFields((err, values) => {
-        if (!err) {
-          // eslint-disable-next-line no-console
-          console.log('Received values of form: ', values)
-        }
-      })
-    }
-  }
-}
-</script>

+ 0 - 331
src/views/form/advancedForm/AdvancedForm.vue

@@ -1,331 +0,0 @@
-<template>
-  <div>
-    <a-card class="card" title="仓库管理" :bordered="false">
-      <repository-form ref="repository" :showSubmit="false" />
-    </a-card>
-    <a-card class="card" title="任务管理" :bordered="false">
-      <task-form ref="task" :showSubmit="false" />
-    </a-card>
-
-    <!-- table -->
-    <a-card>
-      <a-table
-        :columns="columns"
-        :dataSource="data"
-        :pagination="false"
-        :loading="memberLoading"
-      >
-        <template v-for="(col, i) in ['name', 'workId', 'department']" :slot="col" slot-scope="text, record">
-          <a-input
-            :key="col"
-            v-if="record.editable"
-            style="margin: -5px 0"
-            :value="text"
-            :placeholder="columns[i].title"
-            @change="e => handleChange(e.target.value, record.key, col)"
-          />
-          <template v-else>{{ text }}</template>
-        </template>
-        <template slot="operation" slot-scope="text, record">
-          <template v-if="record.editable">
-            <span v-if="record.isNew">
-              <a @click="saveRow(record)">添加</a>
-              <a-divider type="vertical" />
-              <a-popconfirm title="是否要删除此行?" @confirm="remove(record.key)">
-                <a>删除</a>
-              </a-popconfirm>
-            </span>
-            <span v-else>
-              <a @click="saveRow(record)">保存</a>
-              <a-divider type="vertical" />
-              <a @click="cancel(record.key)">取消</a>
-            </span>
-          </template>
-          <span v-else>
-            <a @click="toggle(record.key)">编辑</a>
-            <a-divider type="vertical" />
-            <a-popconfirm title="是否要删除此行?" @confirm="remove(record.key)">
-              <a>删除</a>
-            </a-popconfirm>
-          </span>
-        </template>
-      </a-table>
-      <a-button style="width: 100%; margin-top: 16px; margin-bottom: 8px" type="dashed" icon="plus" @click="newMember">新增成员</a-button>
-    </a-card>
-
-    <!-- fixed footer toolbar -->
-    <footer-tool-bar :style="{ width: isSideMenu() && isDesktop() ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%'}">
-      <span class="popover-wrapper">
-        <a-popover title="表单校验信息" overlayClassName="antd-pro-pages-forms-style-errorPopover" trigger="click" :getPopupContainer="trigger => trigger.parentNode">
-          <template slot="content">
-            <li v-for="item in errors" :key="item.key" @click="scrollToField(item.key)" class="antd-pro-pages-forms-style-errorListItem">
-              <a-icon type="cross-circle-o" class="antd-pro-pages-forms-style-errorIcon" />
-              <div class="">{{ item.message }}</div>
-              <div class="antd-pro-pages-forms-style-errorField">{{ item.fieldLabel }}</div>
-            </li>
-          </template>
-          <span class="antd-pro-pages-forms-style-errorIcon" v-if="errors.length > 0">
-            <a-icon type="exclamation-circle" />{{ errors.length }}
-          </span>
-        </a-popover>
-      </span>
-      <a-button type="primary" @click="validate" :loading="loading">提交</a-button>
-    </footer-tool-bar>
-  </div>
-</template>
-
-<script>
-import RepositoryForm from './RepositoryForm'
-import TaskForm from './TaskForm'
-import FooterToolBar from '@/components/FooterToolbar'
-import { mixin, mixinDevice } from '@/utils/mixin'
-
-const fieldLabels = {
-  name: '仓库名',
-  url: '仓库域名',
-  owner: '仓库管理员',
-  approver: '审批人',
-  dateRange: '生效日期',
-  type: '仓库类型',
-  name2: '任务名',
-  url2: '任务描述',
-  owner2: '执行人',
-  approver2: '责任人',
-  dateRange2: '生效日期',
-  type2: '任务类型'
-}
-
-export default {
-  name: 'AdvancedForm',
-  mixins: [mixin, mixinDevice],
-  components: {
-    FooterToolBar,
-    RepositoryForm,
-    TaskForm
-  },
-  data () {
-    return {
-      description: '高级表单常见于一次性输入和提交大批量数据的场景。',
-      loading: false,
-      memberLoading: false,
-
-      // table
-      columns: [
-        {
-          title: '成员姓名',
-          dataIndex: 'name',
-          key: 'name',
-          width: '20%',
-          scopedSlots: { customRender: 'name' }
-        },
-        {
-          title: '工号',
-          dataIndex: 'workId',
-          key: 'workId',
-          width: '20%',
-          scopedSlots: { customRender: 'workId' }
-        },
-        {
-          title: '所属部门',
-          dataIndex: 'department',
-          key: 'department',
-          width: '40%',
-          scopedSlots: { customRender: 'department' }
-        },
-        {
-          title: '操作',
-          key: 'action',
-          scopedSlots: { customRender: 'operation' }
-        }
-      ],
-      data: [
-        {
-          key: '1',
-          name: '小明',
-          workId: '001',
-          editable: false,
-          department: '行政部'
-        },
-        {
-          key: '2',
-          name: '李莉',
-          workId: '002',
-          editable: false,
-          department: 'IT部'
-        },
-        {
-          key: '3',
-          name: '王小帅',
-          workId: '003',
-          editable: false,
-          department: '财务部'
-        }
-      ],
-
-      errors: []
-    }
-  },
-  methods: {
-    handleSubmit (e) {
-      e.preventDefault()
-    },
-    newMember () {
-      const length = this.data.length
-      this.data.push({
-        key: length === 0 ? '1' : (parseInt(this.data[length - 1].key) + 1).toString(),
-        name: '',
-        workId: '',
-        department: '',
-        editable: true,
-        isNew: true
-      })
-    },
-    remove (key) {
-      const newData = this.data.filter(item => item.key !== key)
-      this.data = newData
-    },
-    saveRow (record) {
-      this.memberLoading = true
-      const { key, name, workId, department } = record
-      if (!name || !workId || !department) {
-        this.memberLoading = false
-        this.$message.error('请填写完整成员信息。')
-        return
-      }
-      // 模拟网络请求、卡顿 800ms
-      new Promise((resolve) => {
-        setTimeout(() => {
-          resolve({ loop: false })
-        }, 800)
-      }).then(() => {
-        const target = this.data.find(item => item.key === key)
-        target.editable = false
-        target.isNew = false
-        this.memberLoading = false
-      })
-    },
-    toggle (key) {
-      const target = this.data.find(item => item.key === key)
-      target._originalData = { ...target }
-      target.editable = !target.editable
-    },
-    getRowByKey (key, newData) {
-      const data = this.data
-      return (newData || data).find(item => item.key === key)
-    },
-    cancel (key) {
-      const target = this.data.find(item => item.key === key)
-      Object.keys(target).forEach(key => { target[key] = target._originalData[key] })
-      target._originalData = undefined
-    },
-    handleChange (value, key, column) {
-      const newData = [...this.data]
-      const target = newData.find(item => key === item.key)
-      if (target) {
-        target[column] = value
-        this.data = newData
-      }
-    },
-
-    // 最终全页面提交
-    validate () {
-      const { $refs: { repository, task }, $notification } = this
-      const repositoryForm = new Promise((resolve, reject) => {
-        repository.form.validateFields((err, values) => {
-          if (err) {
-            reject(err)
-            return
-          }
-          resolve(values)
-        })
-      })
-      const taskForm = new Promise((resolve, reject) => {
-        task.form.validateFields((err, values) => {
-          if (err) {
-            reject(err)
-            return
-          }
-          resolve(values)
-        })
-      })
-
-      // clean this.errors
-      this.errors = []
-      Promise.all([repositoryForm, taskForm]).then(values => {
-        $notification['error']({
-          message: 'Received values of form:',
-          description: JSON.stringify(values)
-        })
-      }).catch(() => {
-        const errors = Object.assign({}, repository.form.getFieldsError(), task.form.getFieldsError())
-        const tmp = { ...errors }
-        this.errorList(tmp)
-      })
-    },
-    errorList (errors) {
-      if (!errors || errors.length === 0) {
-        return
-      }
-      this.errors = Object.keys(errors)
-        .filter(key => errors[key])
-        .map(key => ({
-          key: key,
-          message: errors[key][0],
-          fieldLabel: fieldLabels[key]
-        }))
-    },
-    scrollToField (fieldKey) {
-      const labelNode = document.querySelector(`label[for="${fieldKey}"]`)
-      if (labelNode) {
-        labelNode.scrollIntoView(true)
-      }
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .card{
-    margin-bottom: 24px;
-  }
-  .popover-wrapper {
-    /deep/ .antd-pro-pages-forms-style-errorPopover .ant-popover-inner-content {
-      min-width: 256px;
-      max-height: 290px;
-      padding: 0;
-      overflow: auto;
-    }
-  }
-  .antd-pro-pages-forms-style-errorIcon {
-    user-select: none;
-    margin-right: 24px;
-    color: #f5222d;
-    cursor: pointer;
-    i {
-          margin-right: 4px;
-    }
-  }
-  .antd-pro-pages-forms-style-errorListItem {
-    padding: 8px 16px;
-    list-style: none;
-    border-bottom: 1px solid #e8e8e8;
-    cursor: pointer;
-    transition: all .3s;
-
-    &:hover {
-      background: #e6f7ff;
-    }
-    .antd-pro-pages-forms-style-errorIcon {
-      float: left;
-      margin-top: 4px;
-      margin-right: 12px;
-      padding-bottom: 22px;
-      color: #f5222d;
-    }
-    .antd-pro-pages-forms-style-errorField {
-      margin-top: 2px;
-      color: rgba(0,0,0,.45);
-      font-size: 12px;
-    }
-  }
-</style>

+ 0 - 119
src/views/form/advancedForm/RepositoryForm.vue

@@ -1,119 +0,0 @@
-<template>
-  <a-form @submit="handleSubmit" :form="form" class="form">
-    <a-row class="form-row" :gutter="16">
-      <a-col :lg="6" :md="12" :sm="24">
-        <a-form-item label="仓库名">
-          <a-input
-            placeholder="请输入仓库名称"
-            v-decorator="[
-              'name',
-              {rules: [{ required: true, message: '请输入仓库名称', whitespace: true}]}
-            ]" />
-        </a-form-item>
-      </a-col>
-      <a-col :xl="{span: 7, offset: 1}" :lg="{span: 8}" :md="{span: 12}" :sm="24">
-        <a-form-item
-          label="仓库域名">
-          <a-input
-            addonBefore="http://"
-            addonAfter=".com"
-            placeholder="请输入"
-            v-decorator="[
-              'url',
-              {rules: [{ required: true, message: '请输入仓库域名', whitespace: true}, {validator: validate}]}
-            ]" />
-        </a-form-item>
-      </a-col>
-      <a-col :xl="{span: 9, offset: 1}" :lg="{span: 10}" :md="{span: 24}" :sm="24">
-        <a-form-item
-          label="仓库管理员">
-          <a-select placeholder="请选择管理员" v-decorator="[ 'owner', {initialValue:1,rules: [{ required: true, message: '请选择管理员'}]} ]">
-            <a-select-option :value="1">王同学</a-select-option>
-            <a-select-option :value="2">李同学</a-select-option>
-            <a-select-option :value="3">黄同学</a-select-option>
-          </a-select>
-        </a-form-item>
-      </a-col>
-    </a-row>
-    <a-row class="form-row" :gutter="16">
-      <a-col :lg="6" :md="12" :sm="24">
-        <a-form-item
-          label="审批人">
-          <a-select placeholder="请选择审批员" v-decorator="[ 'approver', {rules: [{ required: true, message: '请选择审批员'}]} ]">
-            <a-select-option value="王晓丽">王晓丽</a-select-option>
-            <a-select-option value="李军">李军</a-select-option>
-          </a-select>
-        </a-form-item>
-      </a-col>
-      <a-col :xl="{span: 7, offset: 1}" :lg="{span: 8}" :md="{span: 12}" :sm="24">
-        <a-form-item
-          label="生效日期">
-          <a-range-picker
-            style="width: 100%"
-            v-decorator="[
-              'dateRange',
-              {rules: [{ required: true, message: '请选择生效日期'}]}
-            ]" />
-        </a-form-item>
-      </a-col>
-      <a-col :xl="{span: 9, offset: 1}" :lg="{span: 10}" :md="{span: 24}" :sm="24">
-        <a-form-item
-          label="仓库类型">
-          <a-select
-            placeholder="请选择仓库类型"
-            v-decorator="[
-              'type',
-              {rules: [{ required: true, message: '请选择仓库类型'}]}
-            ]" >
-            <a-select-option value="公开">公开</a-select-option>
-            <a-select-option value="私密">私密</a-select-option>
-          </a-select>
-        </a-form-item>
-      </a-col>
-    </a-row>
-    <a-form-item v-if="showSubmit">
-      <a-button htmlType="submit" >Submit</a-button>
-    </a-form-item>
-  </a-form>
-</template>
-
-<script>
-export default {
-  name: 'RepositoryForm',
-  props: {
-    showSubmit: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data () {
-    return {
-      form: this.$form.createForm(this)
-    }
-  },
-  methods: {
-    handleSubmit (e) {
-      e.preventDefault()
-      this.form.validateFields((err, values) => {
-        if (!err) {
-          this.$notification['error']({
-            message: 'Received values of form:',
-            description: values
-          })
-        }
-      })
-    },
-    validate (rule, value, callback) {
-      const regex = /^user-(.*)$/
-      if (!regex.test(value)) {
-        callback(new Error('需要以 user- 开头'))
-      }
-      callback()
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 107
src/views/form/advancedForm/TaskForm.vue

@@ -1,107 +0,0 @@
-<template>
-  <a-form @submit="handleSubmit" :form="form" class="form">
-    <a-row class="form-row" :gutter="16">
-      <a-col :lg="6" :md="12" :sm="24">
-        <a-form-item
-          label="任务名">
-          <a-input placeholder="请输入任务名称" v-decorator="[ 'name2', {rules: [{ required: true, message: '请输入任务名称', whitespace: true}]} ]" />
-        </a-form-item>
-      </a-col>
-      <a-col :xl="{span: 7, offset: 1}" :lg="{span: 8}" :md="{span: 12}" :sm="24">
-        <a-form-item
-          label="任务描述">
-          <a-input placeholder="请输入任务描述" v-decorator="[ 'url2', {rules: [{ required: true, message: '请输入任务描述', whitespace: true}]} ]" />
-        </a-form-item>
-      </a-col>
-      <a-col :xl="{span: 9, offset: 1}" :lg="{span: 10}" :md="{span: 24}" :sm="24">
-        <a-form-item
-          label="执行人">
-          <a-select
-            placeholder="请选择执行人"
-            v-decorator="[
-              'owner2',
-              {rules: [{ required: true, message: '请选择执行人'}]}
-            ]" >
-            <a-select-option value="黄丽丽">黄丽丽</a-select-option>
-            <a-select-option value="李大刀">李大刀</a-select-option>
-          </a-select>
-        </a-form-item>
-      </a-col>
-    </a-row>
-    <a-row class="form-row" :gutter="16">
-      <a-col :lg="6" :md="12" :sm="24">
-        <a-form-item
-          label="责任人">
-          <a-select
-            placeholder="请选择责任人"
-            v-decorator="[
-              'approver2',
-              {rules: [{ required: true, message: '请选择责任人'}]}
-            ]" >
-            <a-select-option value="王伟">王伟</a-select-option>
-            <a-select-option value="李红军">李红军</a-select-option>
-          </a-select>
-        </a-form-item>
-      </a-col>
-      <a-col :xl="{span: 7, offset: 1}" :lg="{span: 8}" :md="{span: 12}" :sm="24">
-        <a-form-item
-          label="提醒时间">
-          <a-time-picker
-            style="width: 100%"
-            v-decorator="[
-              'dateRange2',
-              {rules: [{ required: true, message: '请选择提醒时间'}]}
-            ]" />
-        </a-form-item>
-      </a-col>
-      <a-col :xl="{span: 9, offset: 1}" :lg="{span: 10}" :md="{span: 24}" :sm="24">
-        <a-form-item
-          label="任务类型">
-          <a-select
-            placeholder="请选择任务类型"
-            v-decorator="[ 'type2', {rules: [{ required: true, message: '请选择任务类型'}]} ]" >
-            <a-select-option value="定时执行">定时执行</a-select-option>
-            <a-select-option value="周期执行">周期执行</a-select-option>
-          </a-select>
-        </a-form-item>
-      </a-col>
-    </a-row>
-    <a-form-item v-if="showSubmit">
-      <a-button htmlType="submit" >Submit</a-button>
-    </a-form-item>
-  </a-form>
-</template>
-
-<script>
-export default {
-  name: 'TaskForm',
-  props: {
-    showSubmit: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data () {
-    return {
-      form: this.$form.createForm(this)
-    }
-  },
-  methods: {
-    handleSubmit (e) {
-      e.preventDefault()
-      this.form.validateFields((err, values) => {
-        if (!err) {
-          this.$notification['error']({
-            message: 'Received values of form:',
-            description: values
-          })
-        }
-      })
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 112
src/views/form/stepForm/Step1.vue

@@ -1,112 +0,0 @@
-<template>
-  <div>
-    <a-form :form="form" style="max-width: 500px; margin: 40px auto 0;">
-      <a-form-item
-        label="付款账户"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-      >
-        <a-select
-          placeholder="ant-design@alipay.com"
-          v-decorator="['paymentUser', { rules: [{required: true, message: '付款账户必须填写'}] }]">
-          <a-select-option value="1">ant-design@alipay.com</a-select-option>
-        </a-select>
-      </a-form-item>
-      <a-form-item
-        label="收款账户"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-      >
-        <a-input-group
-          style="display: inline-block; vertical-align: middle"
-          :compact="true"
-        >
-          <a-select defaultValue="alipay" style="width: 100px">
-            <a-select-option value="alipay">支付宝</a-select-option>
-            <a-select-option value="wexinpay">微信</a-select-option>
-          </a-select>
-          <a-input
-            :style="{width: 'calc(100% - 100px)'}"
-            v-decorator="['payType', { initialValue: 'test@example.com', rules: [{required: true, message: '收款账户必须填写'}]}]"
-          />
-        </a-input-group>
-      </a-form-item>
-      <a-form-item
-        label="收款人姓名"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-      >
-        <a-input v-decorator="['name', { initialValue: 'Alex', rules: [{required: true, message: '收款人名称必须核对'}] }]"/>
-      </a-form-item>
-      <a-form-item
-        label="转账金额"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-      >
-        <a-input prefix="¥" v-decorator="['momey', { initialValue: '5000', rules: [{required: true, message: '转账金额必须填写'}] }]"/>
-      </a-form-item>
-      <a-form-item :wrapperCol="{span: 19, offset: 5}">
-        <a-button type="primary" @click="nextStep">下一步</a-button>
-      </a-form-item>
-    </a-form>
-    <a-divider />
-    <div class="step-form-style-desc">
-      <h3>说明</h3>
-      <h4>转账到支付宝账户</h4>
-      <p>如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。</p>
-      <h4>转账到银行卡</h4>
-      <p>如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。</p>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Step1',
-  data () {
-    return {
-      labelCol: { lg: { span: 5 }, sm: { span: 5 } },
-      wrapperCol: { lg: { span: 19 }, sm: { span: 19 } },
-      form: this.$form.createForm(this)
-    }
-  },
-  methods: {
-    nextStep () {
-      const { form: { validateFields } } = this
-      // 先校验,通过表单校验后,才进入下一步
-      validateFields((err, values) => {
-        if (!err) {
-          this.$emit('nextStep')
-        }
-      })
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-.step-form-style-desc {
-  padding: 0 56px;
-  color: rgba(0,0,0,.45);
-
-  h3 {
-    margin: 0 0 12px;
-    color: rgba(0,0,0,.45);
-    font-size: 16px;
-    line-height: 32px;
-  }
-
-  h4 {
-    margin: 0 0 4px;
-    color: rgba(0,0,0,.45);
-    font-size: 14px;
-    line-height: 22px;
-  }
-
-  p {
-    margin-top: 0;
-    margin-bottom: 12px;
-    line-height: 22px;
-  }
-}
-</style>

+ 0 - 110
src/views/form/stepForm/Step2.vue

@@ -1,110 +0,0 @@
-<template>
-  <div>
-    <a-form :form="form" style="max-width: 500px; margin: 40px auto 0;">
-      <a-alert
-        :closable="true"
-        message="确认转账后,资金将直接打入对方账户,无法退回。"
-        style="margin-bottom: 24px;"
-      />
-      <a-form-item
-        label="付款账户"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-        class="stepFormText"
-      >
-        ant-design@alipay.com
-      </a-form-item>
-      <a-form-item
-        label="收款账户"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-        class="stepFormText"
-      >
-        test@example.com
-      </a-form-item>
-      <a-form-item
-        label="收款人姓名"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-        class="stepFormText"
-      >
-        Alex
-      </a-form-item>
-      <a-form-item
-        label="转账金额"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-        class="stepFormText"
-      >
-        ¥ 5,000.00
-      </a-form-item>
-      <a-divider />
-      <a-form-item
-        label="支付密码"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-        class="stepFormText"
-      >
-        <a-input
-          type="password"
-          style="width: 80%;"
-          v-decorator="['paymentPassword', { initialValue: '123456', rules: [{required: true, message: '请输入支付密码'}] }]" />
-      </a-form-item>
-      <a-form-item :wrapperCol="{span: 19, offset: 5}">
-        <a-button :loading="loading" type="primary" @click="nextStep">提交</a-button>
-        <a-button style="margin-left: 8px" @click="prevStep">上一步</a-button>
-      </a-form-item>
-    </a-form>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Step2',
-  data () {
-    return {
-      labelCol: { lg: { span: 5 }, sm: { span: 5 } },
-      wrapperCol: { lg: { span: 19 }, sm: { span: 19 } },
-      form: this.$form.createForm(this),
-      loading: false,
-      timer: 0
-    }
-  },
-  methods: {
-    nextStep () {
-      const that = this
-      const { form: { validateFields } } = this
-      that.loading = true
-      validateFields((err, values) => {
-        if (!err) {
-          console.log('表单 values', values)
-          that.timer = setTimeout(function () {
-            that.loading = false
-            that.$emit('nextStep')
-          }, 1500)
-        } else {
-          that.loading = false
-        }
-      })
-    },
-    prevStep () {
-      this.$emit('prevStep')
-    }
-  },
-  beforeDestroy () {
-    clearTimeout(this.timer)
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .stepFormText {
-    margin-bottom: 24px;
-
-    .ant-form-item-label,
-    .ant-form-item-control {
-      line-height: 22px;
-    }
-  }
-
-</style>

+ 0 - 69
src/views/form/stepForm/Step3.vue

@@ -1,69 +0,0 @@
-<template>
-  <div>
-    <a-form style="margin: 40px auto 0;">
-      <result title="操作成功" :is-success="true" description="预计两小时内到账" style="max-width: 560px;">
-        <div class="information">
-          <a-row>
-            <a-col :sm="8" :xs="24">付款账户:</a-col>
-            <a-col :sm="16" :xs="24">ant-design@alipay.com</a-col>
-          </a-row>
-          <a-row>
-            <a-col :sm="8" :xs="24">收款账户:</a-col>
-            <a-col :sm="16" :xs="24">test@example.com</a-col>
-          </a-row>
-          <a-row>
-            <a-col :sm="8" :xs="24">收款人姓名:</a-col>
-            <a-col :sm="16" :xs="24">辉夜</a-col>
-          </a-row>
-          <a-row>
-            <a-col :sm="8" :xs="24">转账金额:</a-col>
-            <a-col :sm="16" :xs="24"><span class="money">500</span> 元</a-col>
-          </a-row>
-        </div>
-        <div slot="action">
-          <a-button type="primary" @click="finish">再转一笔</a-button>
-          <a-button style="margin-left: 8px" @click="toOrderList">查看账单</a-button>
-        </div>
-      </result>
-    </a-form>
-  </div>
-</template>
-
-<script>
-import { Result } from '@/components'
-
-export default {
-  name: 'Step3',
-  components: {
-    Result
-  },
-  data () {
-    return {
-      loading: false
-    }
-  },
-  methods: {
-    finish () {
-      this.$emit('finish')
-    },
-    toOrderList () {
-      this.$router.push('/list/table-list')
-    }
-  }
-}
-</script>
-<style lang="less" scoped>
-  .information {
-    line-height: 22px;
-
-    .ant-row:not(:last-child) {
-      margin-bottom: 24px;
-    }
-  }
-  .money {
-    font-family: "Helvetica Neue",sans-serif;
-    font-weight: 500;
-    font-size: 20px;
-    line-height: 14px;
-  }
-</style>

+ 0 - 62
src/views/form/stepForm/StepForm.vue

@@ -1,62 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <a-steps class="steps" :current="currentTab">
-      <a-step title="填写转账信息" />
-      <a-step title="确认转账信息" />
-      <a-step title="完成" />
-    </a-steps>
-    <div class="content">
-      <step1 v-if="currentTab === 0" @nextStep="nextStep"/>
-      <step2 v-if="currentTab === 1" @nextStep="nextStep" @prevStep="prevStep"/>
-      <step3 v-if="currentTab === 2" @prevStep="prevStep" @finish="finish"/>
-    </div>
-  </a-card>
-</template>
-
-<script>
-import Step1 from './Step1'
-import Step2 from './Step2'
-import Step3 from './Step3'
-
-export default {
-  name: 'StepForm',
-  components: {
-    Step1,
-    Step2,
-    Step3
-  },
-  data () {
-    return {
-      description: '将一个冗长或用户不熟悉的表单任务分成多个步骤,指导用户完成。',
-      currentTab: 0,
-
-      // form
-      form: null
-    }
-  },
-  methods: {
-
-    // handler
-    nextStep () {
-      if (this.currentTab < 2) {
-        this.currentTab += 1
-      }
-    },
-    prevStep () {
-      if (this.currentTab > 0) {
-        this.currentTab -= 1
-      }
-    },
-    finish () {
-      this.currentTab = 0
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .steps {
-    max-width: 750px;
-    margin: 16px auto;
-  }
-</style>

+ 0 - 135
src/views/list/CardList.vue

@@ -1,135 +0,0 @@
-<template>
-  <div class="card-list" ref="content">
-    <a-list
-      rowKey="id"
-      :grid="{gutter: 24, lg: 3, md: 2, sm: 1, xs: 1}"
-      :dataSource="dataSource"
-    >
-      <a-list-item slot="renderItem" slot-scope="item">
-        <template v-if="!item || item.id === undefined">
-          <a-button class="new-btn" type="dashed">
-            <a-icon type="plus"/>
-            新增产品
-          </a-button>
-        </template>
-        <template v-else>
-          <a-card :hoverable="true">
-            <a-card-meta>
-              <a slot="title">{{ item.title }}</a>
-              <a-avatar class="card-avatar" slot="avatar" :src="item.avatar" size="large"/>
-              <div class="meta-content" slot="description">{{ item.content }}</div>
-            </a-card-meta>
-            <template class="ant-card-actions" slot="actions">
-              <a>操作一</a>
-              <a>操作二</a>
-            </template>
-          </a-card>
-        </template>
-      </a-list-item>
-    </a-list>
-  </div>
-</template>
-
-<script>
-
-const dataSource = []
-dataSource.push({})
-for (let i = 0; i < 11; i++) {
-  dataSource.push({
-    id: i,
-    title: 'Alipay',
-    avatar: 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png',
-    content: '在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。'
-  })
-}
-
-export default {
-  name: 'CardList',
-  data () {
-    return {
-      description: '段落示意:蚂蚁金服务设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态, 提供跨越设计与开发的体验解决方案。',
-      linkList: [
-        { icon: 'rocket', href: '#', title: '快速开始' },
-        { icon: 'info-circle-o', href: '#', title: '产品简介' },
-        { icon: 'file-text', href: '#', title: '产品文档' }
-      ],
-      extraImage: 'https://gw.alipayobjects.com/zos/rmsportal/RzwpdLnhmvDJToTdfDPe.png',
-      dataSource
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  @import "~@/components/index.less";
-
-  .card-list {
-    /deep/ .ant-card-body:hover {
-      .ant-card-meta-title>a {
-        color: @primary-color;
-      }
-    }
-
-    /deep/ .ant-card-meta-title {
-      margin-bottom: 12px;
-
-      &>a {
-        display: inline-block;
-        max-width: 100%;
-        color: rgba(0,0,0,.85);
-      }
-    }
-
-    /deep/ .meta-content {
-      position: relative;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      display: -webkit-box;
-      height: 64px;
-      -webkit-line-clamp: 3;
-      -webkit-box-orient: vertical;
-
-      margin-bottom: 1em;
-    }
-  }
-
-  .card-avatar {
-    width: 48px;
-    height: 48px;
-    border-radius: 48px;
-  }
-
-  .ant-card-actions {
-    background: #f7f9fa;
-
-    li {
-      float: left;
-      text-align: center;
-      margin: 12px 0;
-      color: rgba(0, 0, 0, 0.45);
-      width: 50%;
-
-      &:not(:last-child) {
-        border-right: 1px solid #e8e8e8;
-      }
-
-      a {
-        color: rgba(0, 0, 0, .45);
-        line-height: 22px;
-        display: inline-block;
-        width: 100%;
-        &:hover {
-          color: @primary-color;
-        }
-      }
-    }
-  }
-
-  .new-btn {
-    background-color: #fff;
-    border-radius: 2px;
-    width: 100%;
-    height: 188px;
-  }
-
-</style>

+ 0 - 50
src/views/list/QueryList.vue

@@ -1,50 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <component @onEdit="handleEdit" @onGoBack="handleGoBack" :record="record" :is="currentComponet"></component>
-  </a-card>
-</template>
-
-<script>
-
-import ATextarea from 'ant-design-vue/es/input/TextArea'
-import AInput from 'ant-design-vue/es/input/Input'
-// 动态切换组件
-import List from '@/views/list/table/List'
-import Edit from '@/views/list/table/Edit'
-
-export default {
-  name: 'TableListWrapper',
-  components: {
-    AInput,
-    ATextarea,
-    List,
-    Edit
-  },
-  data () {
-    return {
-      currentComponet: 'List',
-      record: ''
-    }
-  },
-  created () {
-
-  },
-  methods: {
-    handleEdit (record) {
-      this.record = record || ''
-      this.currentComponet = 'Edit'
-      console.log(record)
-    },
-    handleGoBack () {
-      this.record = ''
-      this.currentComponet = 'List'
-    }
-  },
-  watch: {
-    '$route.path' () {
-      this.record = ''
-      this.currentComponet = 'List'
-    }
-  }
-}
-</script>

+ 0 - 168
src/views/list/StandardList.vue

@@ -1,168 +0,0 @@
-<template>
-  <div>
-    <a-card :bordered="false">
-      <a-row>
-        <a-col :sm="8" :xs="24">
-          <head-info title="我的待办" content="8个任务" :bordered="true"/>
-        </a-col>
-        <a-col :sm="8" :xs="24">
-          <head-info title="本周任务平均处理时间" content="32分钟" :bordered="true"/>
-        </a-col>
-        <a-col :sm="8" :xs="24">
-          <head-info title="本周完成任务数" content="24个"/>
-        </a-col>
-      </a-row>
-    </a-card>
-
-    <a-card
-      style="margin-top: 24px"
-      :bordered="false"
-      title="标准列表">
-
-      <div slot="extra">
-        <a-radio-group v-model="status">
-          <a-radio-button value="all">全部</a-radio-button>
-          <a-radio-button value="processing">进行中</a-radio-button>
-          <a-radio-button value="waiting">等待中</a-radio-button>
-        </a-radio-group>
-        <a-input-search style="margin-left: 16px; width: 272px;" />
-      </div>
-
-      <div class="operate">
-        <a-button type="dashed" style="width: 100%" icon="plus" @click="$refs.taskForm.add()">添加</a-button>
-      </div>
-
-      <a-list size="large" :pagination="{showSizeChanger: true, showQuickJumper: true, pageSize: 5, total: 50}">
-        <a-list-item :key="index" v-for="(item, index) in data">
-          <a-list-item-meta :description="item.description">
-            <a-avatar slot="avatar" size="large" shape="square" :src="item.avatar"/>
-            <a slot="title">{{ item.title }}</a>
-          </a-list-item-meta>
-          <div slot="actions">
-            <a>编辑</a>
-          </div>
-          <div slot="actions">
-            <a-dropdown>
-              <a-menu slot="overlay">
-                <a-menu-item><a>编辑</a></a-menu-item>
-                <a-menu-item><a>删除</a></a-menu-item>
-              </a-menu>
-              <a>更多<a-icon type="down"/></a>
-            </a-dropdown>
-          </div>
-          <div class="list-content">
-            <div class="list-content-item">
-              <span>Owner</span>
-              <p>{{ item.owner }}</p>
-            </div>
-            <div class="list-content-item">
-              <span>开始时间</span>
-              <p>{{ item.startAt }}</p>
-            </div>
-            <div class="list-content-item">
-              <a-progress :percent="item.progress.value" :status="!item.progress.status ? null : item.progress.status" style="width: 180px" />
-            </div>
-          </div>
-        </a-list-item>
-      </a-list>
-
-      <task-form ref="taskForm" />
-    </a-card>
-  </div>
-</template>
-
-<script>
-import HeadInfo from '@/components/tools/HeadInfo'
-import TaskForm from './modules/TaskForm'
-
-const data = []
-data.push({
-  title: 'Alipay',
-  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png',
-  description: '那是一种内在的东西, 他们到达不了,也无法触及的',
-  owner: '付晓晓',
-  startAt: '2018-07-26 22:44',
-  progress: {
-    value: 90
-  }
-})
-data.push({
-  title: 'Angular',
-  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png',
-  description: '希望是一个好东西,也许是最好的,好东西是不会消亡的',
-  owner: '曲丽丽',
-  startAt: '2018-07-26 22:44',
-  progress: {
-    value: 54
-  }
-})
-data.push({
-  title: 'Ant Design',
-  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png',
-  description: '生命就像一盒巧克力,结果往往出人意料',
-  owner: '林东东',
-  startAt: '2018-07-26 22:44',
-  progress: {
-    value: 66
-  }
-})
-data.push({
-  title: 'Ant Design Pro',
-  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png',
-  description: '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆',
-  owner: '周星星',
-  startAt: '2018-07-26 22:44',
-  progress: {
-    value: 30
-  }
-})
-data.push({
-  title: 'Bootstrap',
-  avatar: 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png',
-  description: '那时候我只会想自己想要什么,从不想自己拥有什么',
-  owner: '吴加好',
-  startAt: '2018-07-26 22:44',
-  progress: {
-    status: 'exception',
-    value: 100
-  }
-})
-
-export default {
-  name: 'StandardList',
-  components: {
-    HeadInfo,
-    TaskForm
-  },
-  data () {
-    return {
-      data,
-      status: 'all'
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-    .ant-avatar-lg {
-        width: 48px;
-        height: 48px;
-        line-height: 48px;
-    }
-
-    .list-content-item {
-        color: rgba(0, 0, 0, .45);
-        display: inline-block;
-        vertical-align: middle;
-        font-size: 14px;
-        margin-left: 40px;
-        span {
-            line-height: 20px;
-        }
-        p {
-            margin-top: 4px;
-            margin-bottom: 0;
-            line-height: 22px;
-        }
-    }
-</style>

+ 0 - 280
src/views/list/TableList.vue

@@ -1,280 +0,0 @@
-<template>
-  <a-card :bordered="false">
-    <div class="table-page-search-wrapper">
-      <a-form layout="inline">
-        <a-row :gutter="48">
-          <a-col :md="8" :sm="24">
-            <a-form-item label="规则编号">
-              <a-input v-model="queryParam.id" placeholder=""/>
-            </a-form-item>
-          </a-col>
-          <a-col :md="8" :sm="24">
-            <a-form-item label="使用状态">
-              <a-select v-model="queryParam.status" placeholder="请选择" default-value="0">
-                <a-select-option value="0">全部</a-select-option>
-                <a-select-option value="1">关闭</a-select-option>
-                <a-select-option value="2">运行中</a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <template v-if="advanced">
-            <a-col :md="8" :sm="24">
-              <a-form-item label="调用次数">
-                <a-input-number v-model="queryParam.callNo" style="width: 100%"/>
-              </a-form-item>
-            </a-col>
-            <a-col :md="8" :sm="24">
-              <a-form-item label="更新日期">
-                <a-date-picker v-model="queryParam.date" style="width: 100%" placeholder="请输入更新日期"/>
-              </a-form-item>
-            </a-col>
-            <a-col :md="8" :sm="24">
-              <a-form-item label="使用状态">
-                <a-select v-model="queryParam.useStatus" placeholder="请选择" default-value="0">
-                  <a-select-option value="0">全部</a-select-option>
-                  <a-select-option value="1">关闭</a-select-option>
-                  <a-select-option value="2">运行中</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-            <a-col :md="8" :sm="24">
-              <a-form-item label="使用状态">
-                <a-select placeholder="请选择" default-value="0">
-                  <a-select-option value="0">全部</a-select-option>
-                  <a-select-option value="1">关闭</a-select-option>
-                  <a-select-option value="2">运行中</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-          </template>
-          <a-col :md="!advanced && 8 || 24" :sm="24">
-            <span class="table-page-search-submitButtons" :style="advanced && { float: 'right', overflow: 'hidden' } || {} ">
-              <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
-              <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
-              <a @click="toggleAdvanced" style="margin-left: 8px">
-                {{ advanced ? '收起' : '展开' }}
-                <a-icon :type="advanced ? 'up' : 'down'"/>
-              </a>
-            </span>
-          </a-col>
-        </a-row>
-      </a-form>
-    </div>
-
-    <div class="table-operator">
-      <a-button type="primary" icon="plus" @click="$refs.createModal.add()">新建</a-button>
-      <a-button type="dashed" @click="tableOption">{{ optionAlertShow && '关闭' || '开启' }} alert</a-button>
-      <a-dropdown v-action:edit v-if="selectedRowKeys.length > 0">
-        <a-menu slot="overlay">
-          <a-menu-item key="1"><a-icon type="delete" />删除</a-menu-item>
-          <!-- lock | unlock -->
-          <a-menu-item key="2"><a-icon type="lock" />锁定</a-menu-item>
-        </a-menu>
-        <a-button style="margin-left: 8px">
-          批量操作 <a-icon type="down" />
-        </a-button>
-      </a-dropdown>
-    </div>
-
-    <s-table
-      ref="table"
-      size="default"
-      rowKey="key"
-      :columns="columns"
-      :data="loadData"
-      :alert="options.alert"
-      :rowSelection="options.rowSelection"
-      showPagination="auto"
-    >
-      <span slot="serial" slot-scope="text, record, index">
-        {{ index + 1 }}
-      </span>
-      <span slot="status" slot-scope="text">
-        <a-badge :status="text | statusTypeFilter" :text="text | statusFilter" />
-      </span>
-      <span slot="description" slot-scope="text">
-        <ellipsis :length="4" tooltip>{{ text }}</ellipsis>
-      </span>
-
-      <span slot="action" slot-scope="text, record">
-        <template>
-          <a @click="handleEdit(record)">配置</a>
-          <a-divider type="vertical" />
-          <a @click="handleSub(record)">订阅报警</a>
-        </template>
-      </span>
-    </s-table>
-    <create-form ref="createModal" @ok="handleOk" />
-    <step-by-step-modal ref="modal" @ok="handleOk"/>
-  </a-card>
-</template>
-
-<script>
-import moment from 'moment'
-import { STable, Ellipsis } from '@/components'
-import StepByStepModal from './modules/StepByStepModal'
-import CreateForm from './modules/CreateForm'
-import { getRoleList, getServiceList } from '@/api/upms/manage'
-
-const statusMap = {
-  0: {
-    status: 'default',
-    text: '关闭'
-  },
-  1: {
-    status: 'processing',
-    text: '运行中'
-  },
-  2: {
-    status: 'success',
-    text: '已上线'
-  },
-  3: {
-    status: 'error',
-    text: '异常'
-  }
-}
-
-export default {
-  name: 'TableList',
-  components: {
-    STable,
-    Ellipsis,
-    CreateForm,
-    StepByStepModal
-  },
-  data () {
-    return {
-      mdl: {},
-      // 高级搜索 展开/关闭
-      advanced: false,
-      // 查询参数
-      queryParam: {},
-      // 表头
-      columns: [
-        {
-          title: '#',
-          scopedSlots: { customRender: 'serial' }
-        },
-        {
-          title: '规则编号',
-          dataIndex: 'no'
-        },
-        {
-          title: '描述',
-          dataIndex: 'description',
-          scopedSlots: { customRender: 'description' }
-        },
-        {
-          title: '服务调用次数',
-          dataIndex: 'callNo',
-          sorter: true,
-          needTotal: true,
-          customRender: (text) => text + ' 次'
-        },
-        {
-          title: '状态',
-          dataIndex: 'status',
-          scopedSlots: { customRender: 'status' }
-        },
-        {
-          title: '更新时间',
-          dataIndex: 'updatedAt',
-          sorter: true
-        },
-        {
-          title: '操作',
-          dataIndex: 'action',
-          width: '150px',
-          scopedSlots: { customRender: 'action' }
-        }
-      ],
-      // 加载数据方法 必须为 Promise 对象
-      loadData: parameter => {
-        console.log('loadData.parameter', parameter)
-        return getServiceList(Object.assign(parameter, this.queryParam))
-          .then(res => {
-            return res.result
-          })
-      },
-      selectedRowKeys: [],
-      selectedRows: [],
-
-      // custom table alert & rowSelection
-      options: {
-        alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
-        rowSelection: {
-          selectedRowKeys: this.selectedRowKeys,
-          onChange: this.onSelectChange
-        }
-      },
-      optionAlertShow: false
-    }
-  },
-  filters: {
-    statusFilter (type) {
-      return statusMap[type].text
-    },
-    statusTypeFilter (type) {
-      return statusMap[type].status
-    }
-  },
-  created () {
-    this.tableOption()
-    getRoleList({ t: new Date() })
-  },
-  methods: {
-    tableOption () {
-      if (!this.optionAlertShow) {
-        this.options = {
-          alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
-          rowSelection: {
-            selectedRowKeys: this.selectedRowKeys,
-            onChange: this.onSelectChange,
-            getCheckboxProps: record => ({
-              props: {
-                disabled: record.no === 'No 2', // Column configuration not to be checked
-                name: record.no
-              }
-            })
-          }
-        }
-        this.optionAlertShow = true
-      } else {
-        this.options = {
-          alert: false,
-          rowSelection: null
-        }
-        this.optionAlertShow = false
-      }
-    },
-
-    handleEdit (record) {
-      console.log(record)
-      this.$refs.modal.edit(record)
-    },
-    handleSub (record) {
-      if (record.status !== 0) {
-        this.$message.info(`${record.no} 订阅成功`)
-      } else {
-        this.$message.error(`${record.no} 订阅失败,规则已关闭`)
-      }
-    },
-    handleOk () {
-      this.$refs.table.refresh()
-    },
-    onSelectChange (selectedRowKeys, selectedRows) {
-      this.selectedRowKeys = selectedRowKeys
-      this.selectedRows = selectedRows
-    },
-    toggleAdvanced () {
-      this.advanced = !this.advanced
-    },
-    resetSearchForm () {
-      this.queryParam = {
-        date: moment(new Date())
-      }
-    }
-  }
-}
-</script>

+ 0 - 67
src/views/list/modules/CreateForm.vue

@@ -1,67 +0,0 @@
-<template>
-  <a-modal
-    title="新建规则"
-    :width="640"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    @ok="handleSubmit"
-    @cancel="handleCancel"
-  >
-    <a-spin :spinning="confirmLoading">
-      <a-form :form="form">
-        <a-form-item
-          label="描述"
-          :labelCol="labelCol"
-          :wrapperCol="wrapperCol"
-        >
-          <a-input v-decorator="['desc', {rules: [{required: true, min: 5, message: '请输入至少五个字符的规则描述!'}]}]" />
-        </a-form-item>
-      </a-form>
-    </a-spin>
-  </a-modal>
-</template>
-
-<script>
-export default {
-  data () {
-    return {
-      labelCol: {
-        xs: { span: 24 },
-        sm: { span: 7 }
-      },
-      wrapperCol: {
-        xs: { span: 24 },
-        sm: { span: 13 }
-      },
-      visible: false,
-      confirmLoading: false,
-
-      form: this.$form.createForm(this)
-    }
-  },
-  methods: {
-    add () {
-      this.visible = true
-    },
-    handleSubmit () {
-      const { form: { validateFields } } = this
-      this.confirmLoading = true
-      validateFields((errors, values) => {
-        if (!errors) {
-          console.log('values', values)
-          setTimeout(() => {
-            this.visible = false
-            this.confirmLoading = false
-            this.$emit('ok', values)
-          }, 1500)
-        } else {
-          this.confirmLoading = false
-        }
-      })
-    },
-    handleCancel () {
-      this.visible = false
-    }
-  }
-}
-</script>

+ 0 - 172
src/views/list/modules/StepByStepModal.vue

@@ -1,172 +0,0 @@
-<template>
-  <a-modal
-    title="分步对话框"
-    :width="640"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    @cancel="handleCancel"
-  >
-    <a-spin :spinning="confirmLoading">
-      <a-steps :current="currentStep" :style="{ marginBottom: '28px' }" size="small">
-        <a-step title="基本信息" />
-        <a-step title="配置规则属性" />
-        <a-step title="设定调度周期" />
-      </a-steps>
-      <a-form :form="form">
-        <!-- step1 -->
-        <div v-show="currentStep === 0">
-          <a-form-item
-            label="规则名称"
-            :labelCol="labelCol"
-            :wrapperCol="wrapperCol"
-          >
-            <a-input v-decorator="['name', {rules: [{required: true}]}]" />
-          </a-form-item>
-          <a-form-item
-            label="规则描述"
-            :labelCol="labelCol"
-            :wrapperCol="wrapperCol"
-          >
-            <a-textarea :rows="4" v-decorator="['desc', {rules: [{required: true}]}]"></a-textarea>
-          </a-form-item>
-        </div>
-        <div v-show="currentStep === 1">
-          <a-form-item
-            label="监控对象"
-            :labelCol="labelCol"
-            :wrapperCol="wrapperCol"
-          >
-            <a-select v-decorator="['target', {initialValue: 0, rules: [{required: true}]}]" style="width: 100%">
-              <a-select-option :value="0">表一</a-select-option>
-              <a-select-option :value="1">表二</a-select-option>
-            </a-select>
-          </a-form-item>
-
-          <a-form-item
-            label="规则模板"
-            :labelCol="labelCol"
-            :wrapperCol="wrapperCol"
-          >
-            <a-select v-decorator="['template', { initialValue: 0, rules: [{required: true}]}]" style="width: 100%">
-              <a-select-option :value="0">规则模板一</a-select-option>
-              <a-select-option :value="1">规则模板二</a-select-option>
-            </a-select>
-          </a-form-item>
-
-          <a-form-item
-            label="规则类型"
-            :labelCol="labelCol"
-            :wrapperCol="wrapperCol"
-          >
-            <a-radio-group v-decorator="['type', {initialValue: 0, rules: [{required: true}]}]" style="width: 100%">
-              <a-radio :value="0">强</a-radio>
-              <a-radio :value="1">弱</a-radio>
-            </a-radio-group>
-          </a-form-item>
-        </div>
-
-        <div v-show="currentStep === 2">
-          <a-form-item
-            label="开始时间"
-            :labelCol="labelCol"
-            :wrapperCol="wrapperCol"
-          >
-            <a-date-picker v-decorator="['time', {rules: [{ type: 'object', required: true, message: 'Please select time!' }]}]" style="width: 100%" />
-          </a-form-item>
-          <a-form-item
-            label="调度周期"
-            :labelCol="labelCol"
-            :wrapperCol="wrapperCol"
-          >
-            <a-select v-decorator="['frequency', { initialValue: 'month', rules: [{required: true}]}]" style="width: 100%">
-              <a-select-option value="month">月</a-select-option>
-              <a-select-option value="week">周</a-select-option>
-            </a-select>
-          </a-form-item>
-        </div>
-        <!-- step1 end -->
-      </a-form>
-    </a-spin>
-    <template slot="footer">
-      <a-button key="back" @click="backward" v-if="currentStep > 0" :style="{ float: 'left' }" >上一步</a-button>
-      <a-button key="cancel" @click="handleCancel">取消</a-button>
-      <a-button key="forward" :loading="confirmLoading" type="primary" @click="handleNext(currentStep)">{{ currentStep === 2 && '完成' || '下一步' }}</a-button>
-    </template>
-  </a-modal>
-</template>
-
-<script>
-import pick from 'lodash.pick'
-
-const stepForms = [
-  ['name', 'desc'],
-  ['target', 'template', 'type'],
-  ['time', 'frequency']
-]
-
-export default {
-  name: 'StepByStepModal',
-  data () {
-    return {
-      labelCol: {
-        xs: { span: 24 },
-        sm: { span: 7 }
-      },
-      wrapperCol: {
-        xs: { span: 24 },
-        sm: { span: 13 }
-      },
-      visible: false,
-      confirmLoading: false,
-      currentStep: 0,
-      mdl: {},
-
-      form: this.$form.createForm(this)
-    }
-  },
-  methods: {
-    edit (record) {
-      this.visible = true
-      const { form: { setFieldsValue } } = this
-      this.$nextTick(() => {
-        setFieldsValue(pick(record, []))
-      })
-    },
-    handleNext (step) {
-      const { form: { validateFields } } = this
-      const currentStep = step + 1
-      if (currentStep <= 2) {
-        // stepForms
-        validateFields(stepForms[ this.currentStep ], (errors, values) => {
-          if (!errors) {
-            this.currentStep = currentStep
-          }
-        })
-        return
-      }
-      // last step
-      this.confirmLoading = true
-      validateFields((errors, values) => {
-        console.log('errors:', errors, 'val:', values)
-        if (!errors) {
-          console.log('values:', values)
-          setTimeout(() => {
-            this.confirmLoading = false
-            this.$emit('ok', values)
-          }, 1500)
-        } else {
-          this.confirmLoading = false
-        }
-      })
-    },
-    backward () {
-      this.currentStep--
-    },
-    handleCancel () {
-      // clear form & currentStep
-      this.visible = false
-      this.currentStep = 0
-    }
-  }
-}
-</script>

+ 0 - 79
src/views/list/modules/TaskForm.vue

@@ -1,79 +0,0 @@
-<template>
-  <a-modal :width="640" :visible="visible" title="任务添加" @ok="handleSubmit" @cancel="visible = false">
-    <a-form @submit="handleSubmit" :form="form">
-      <a-form-item
-        label="任务名称"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-      >
-        <a-input v-decorator="['taskName', {rules:[{required: true, message: '请输入任务名称'}]}]" />
-      </a-form-item>
-      <a-form-item
-        label="开始时间"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-      >
-        <a-date-picker style="width: 100%" v-decorator="['startTime', {rules:[{required: true, message: '请选择开始时间'}]}]" />
-      </a-form-item>
-      <a-form-item
-        label="任务负责人"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-      >
-        <a-select v-decorator="['owner', {rules:[{required: true, message: '请选择开始时间'}]}]">
-          <a-select-option :value="0">付晓晓</a-select-option>
-          <a-select-option :value="1">周毛毛</a-select-option>
-        </a-select>
-      </a-form-item>
-      <a-form-item
-        label="产品描述"
-        :labelCol="labelCol"
-        :wrapperCol="wrapperCol"
-      >
-        <a-textarea v-decorator="['desc']"></a-textarea>
-      </a-form-item>
-    </a-form>
-  </a-modal>
-</template>
-
-<script>
-export default {
-  name: 'TaskForm',
-  data () {
-    return {
-      labelCol: {
-        xs: { span: 24 },
-        sm: { span: 7 }
-      },
-      wrapperCol: {
-        xs: { span: 24 },
-        sm: { span: 13 }
-      },
-
-      visible: false,
-      form: this.$form.createForm(this)
-    }
-  },
-  methods: {
-    add () {
-      this.visible = true
-    },
-    edit (record) {
-      const { form: { setFieldsValue } } = this
-      this.visible = true
-      this.$nextTick(() => {
-        setFieldsValue({ taskName: 'test' })
-      })
-    },
-    handleSubmit () {
-      const { form: { validateFields } } = this
-      this.visible = true
-      validateFields((errors, values) => {
-        if (!errors) {
-          console.log('values', values)
-        }
-      })
-    }
-  }
-}
-</script>

+ 0 - 186
src/views/list/search/Applications.vue

@@ -1,186 +0,0 @@
-<template>
-  <div>
-    <a-card :bordered="false" class="ant-pro-components-tag-select">
-      <a-form :form="form" layout="inline">
-        <standard-form-row title="所属类目" block style="padding-bottom: 11px;">
-          <a-form-item>
-            <tag-select>
-              <tag-select-option value="Category1">类目一</tag-select-option>
-              <tag-select-option value="Category2">类目二</tag-select-option>
-              <tag-select-option value="Category3">类目三</tag-select-option>
-              <tag-select-option value="Category4">类目四</tag-select-option>
-              <tag-select-option value="Category5">类目五</tag-select-option>
-              <tag-select-option value="Category6">类目六</tag-select-option>
-              <tag-select-option value="Category7">类目七</tag-select-option>
-              <tag-select-option value="Category8">类目八</tag-select-option>
-              <tag-select-option value="Category9">类目九</tag-select-option>
-              <tag-select-option value="Category10">类目十</tag-select-option>
-            </tag-select>
-          </a-form-item>
-        </standard-form-row>
-
-        <standard-form-row title="其它选项" grid last>
-          <a-row>
-            <a-col :lg="8" :md="10" :sm="10" :xs="24">
-              <a-form-item :wrapper-col="{ sm: { span: 16 }, xs: { span: 24 } }" label="作者">
-                <a-select
-                  style="max-width: 200px; width: 100%;"
-                  mode="multiple"
-                  placeholder="不限"
-                  v-decorator="['author']"
-                  @change="handleChange"
-                >
-                  <a-select-option value="lisa">王昭君</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-            <a-col :lg="8" :md="10" :sm="10" :xs="24">
-              <a-form-item :wrapper-col="{ sm: { span: 16 }, xs: { span: 24 } }" label="好评度">
-                <a-select
-                  style="max-width: 200px; width: 100%;"
-                  placeholder="不限"
-                  v-decorator="['rate']"
-                >
-                  <a-select-option value="good">优秀</a-select-option>
-                  <a-select-option value="normal">普通</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-          </a-row>
-        </standard-form-row>
-      </a-form>
-    </a-card>
-
-    <div class="ant-pro-pages-list-applications-filterCardList">
-      <a-list :loading="loading" :data-source="data" :grid="{ gutter: 24, xl: 4, lg: 3, md: 3, sm: 2, xs: 1 }" style="margin-top: 24px;">
-        <a-list-item slot="renderItem" slot-scope="item">
-          <a-card :body-style="{ paddingBottom: 20 }" hoverable>
-            <a-card-meta :title="item.title">
-              <template slot="avatar">
-                <a-avatar size="small" :src="item.avatar"/>
-              </template>
-            </a-card-meta>
-            <template slot="actions">
-              <a-tooltip title="下载">
-                <a-icon type="download" />
-              </a-tooltip>
-              <a-tooltip title="编辑">
-                <a-icon type="edit" />
-              </a-tooltip>
-              <a-tooltip title="分享">
-                <a-icon type="share-alt" />
-              </a-tooltip>
-              <a-dropdown>
-                <a class="ant-dropdown-link">
-                  <a-icon type="ellipsis" />
-                </a>
-                <a-menu slot="overlay">
-                  <a-menu-item>
-                    <a href="javascript:;">1st menu item</a>
-                  </a-menu-item>
-                  <a-menu-item>
-                    <a href="javascript:;">2nd menu item</a>
-                  </a-menu-item>
-                  <a-menu-item>
-                    <a href="javascript:;">3rd menu item</a>
-                  </a-menu-item>
-                </a-menu>
-              </a-dropdown>
-            </template>
-            <div class="">
-              <card-info active-user="100" new-user="999"></card-info>
-            </div>
-          </a-card>
-        </a-list-item>
-      </a-list>
-    </div>
-  </div>
-</template>
-
-<script>
-import moment from 'moment'
-import { TagSelect, StandardFormRow, Ellipsis, AvatarList } from '@/components'
-import CardInfo from './components/CardInfo'
-const TagSelectOption = TagSelect.Option
-const AvatarListItem = AvatarList.AvatarItem
-
-export default {
-  components: {
-    AvatarList,
-    AvatarListItem,
-    Ellipsis,
-    TagSelect,
-    TagSelectOption,
-    StandardFormRow,
-    CardInfo
-  },
-  data () {
-    return {
-      data: [],
-      form: this.$form.createForm(this),
-      loading: true
-    }
-  },
-  filters: {
-    fromNow (date) {
-      return moment(date).fromNow()
-    }
-  },
-  mounted () {
-    this.getList()
-  },
-  methods: {
-    handleChange (value) {
-      console.log(`selected ${value}`)
-    },
-    getList () {
-      this.$http.get('/list/article', { params: { count: 8 } }).then(res => {
-        console.log('res', res)
-        this.data = res.result
-        this.loading = false
-      })
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-.ant-pro-components-tag-select {
-  /deep/ .ant-pro-tag-select .ant-tag {
-    margin-right: 24px;
-    padding: 0 8px;
-    font-size: 14px;
-  }
-}
-.ant-pro-pages-list-projects-cardList {
-  margin-top: 24px;
-
-  /deep/ .ant-card-meta-title {
-    margin-bottom: 4px;
-  }
-
-  /deep/ .ant-card-meta-description {
-    height: 44px;
-    overflow: hidden;
-    line-height: 22px;
-  }
-
-  .cardItemContent {
-    display: flex;
-    height: 20px;
-    margin-top: 16px;
-    margin-bottom: -4px;
-    line-height: 20px;
-
-    > span {
-      flex: 1 1;
-      color: rgba(0,0,0,.45);
-      font-size: 12px;
-    }
-
-    /deep/ .ant-pro-avatar-list {
-      flex: 0 1 auto;
-    }
-  }
-}
-</style>

+ 0 - 185
src/views/list/search/Article.vue

@@ -1,185 +0,0 @@
-<template>
-  <div>
-    <a-card :bordered="false" class="ant-pro-components-tag-select">
-      <a-form :form="form" layout="inline">
-        <standard-form-row title="所属类目" block style="padding-bottom: 11px;">
-          <a-form-item>
-            <tag-select>
-              <tag-select-option value="Category1">类目一</tag-select-option>
-              <tag-select-option value="Category2">类目二</tag-select-option>
-              <tag-select-option value="Category3">类目三</tag-select-option>
-              <tag-select-option value="Category4">类目四</tag-select-option>
-              <tag-select-option value="Category5">类目五</tag-select-option>
-              <tag-select-option value="Category6">类目六</tag-select-option>
-              <tag-select-option value="Category7">类目七</tag-select-option>
-              <tag-select-option value="Category8">类目八</tag-select-option>
-              <tag-select-option value="Category9">类目九</tag-select-option>
-              <tag-select-option value="Category10">类目十</tag-select-option>
-            </tag-select>
-          </a-form-item>
-        </standard-form-row>
-
-        <standard-form-row title="owner" grid>
-          <a-row>
-            <a-col :md="24">
-              <a-form-item :wrapper-col="{ span: 24 }">
-                <a-select
-                  style="max-width: 268px; width: 100%;"
-                  mode="multiple"
-                  placeholder="选择 onwer"
-                  v-decorator="['owner']"
-                  @change="handleChange"
-                >
-                  <a-select-option v-for="item in owners" :key="item.id">{{ item.name }}</a-select-option>
-                </a-select>
-                <a class="list-articles-trigger" @click="setOwner">只看自己的</a>
-              </a-form-item>
-            </a-col>
-          </a-row>
-        </standard-form-row>
-
-        <standard-form-row title="其它选项" grid last>
-          <a-row :gutter="16">
-            <a-col :xs="24" :sm="24" :md="12" :lg="10" :xl="8">
-              <a-form-item label="活跃用户" :wrapper-col="{ xs: 24, sm: 24, md: 12 }">
-                <a-select placeholder="不限" style="max-width: 200px; width: 100%;">
-                  <a-select-option value="李三">李三</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-            <a-col :xs="24" :sm="24" :md="12" :lg="10" :xl="8">
-              <a-form-item label="好评度" :wrapper-col="{ xs: 24, sm: 24, md: 12 }">
-                <a-select placeholder="不限" style="max-width: 200px; width: 100%;">
-                  <a-select-option value="优秀">优秀</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-          </a-row>
-        </standard-form-row>
-      </a-form>
-    </a-card>
-
-    <a-card style="margin-top: 24px;" :bordered="false">
-      <a-list
-        size="large"
-        rowKey="id"
-        :loading="loading"
-        itemLayout="vertical"
-        :dataSource="data"
-      >
-        <a-list-item :key="item.id" slot="renderItem" slot-scope="item">
-          <template slot="actions">
-            <icon-text type="star-o" :text="item.star" />
-            <icon-text type="like-o" :text="item.like" />
-            <icon-text type="message" :text="item.message" />
-          </template>
-          <a-list-item-meta>
-            <a slot="title" href="https://vue.ant.design/">{{ item.title }}</a>
-            <template slot="description">
-              <span>
-                <a-tag>Ant Design</a-tag>
-                <a-tag>设计语言</a-tag>
-                <a-tag>蚂蚁金服</a-tag>
-              </span>
-            </template>
-          </a-list-item-meta>
-          <article-list-content :description="item.description" :owner="item.owner" :avatar="item.avatar" :href="item.href" :updateAt="item.updatedAt" />
-        </a-list-item>
-        <div slot="footer" v-if="data.length > 0" style="text-align: center; margin-top: 16px;">
-          <a-button @click="loadMore" :loading="loadingMore">加载更多</a-button>
-        </div>
-      </a-list>
-    </a-card>
-  </div>
-</template>
-
-<script>
-import { TagSelect, StandardFormRow, ArticleListContent } from '@/components'
-import IconText from './components/IconText'
-const TagSelectOption = TagSelect.Option
-
-const owners = [
-  {
-    id: 'wzj',
-    name: '我自己'
-  },
-  {
-    id: 'wjh',
-    name: '吴家豪'
-  },
-  {
-    id: 'zxx',
-    name: '周星星'
-  },
-  {
-    id: 'zly',
-    name: '赵丽颖'
-  },
-  {
-    id: 'ym',
-    name: '姚明'
-  }
-]
-
-export default {
-  components: {
-    TagSelect,
-    TagSelectOption,
-    StandardFormRow,
-    ArticleListContent,
-    IconText
-  },
-  data () {
-    return {
-      owners,
-      loading: true,
-      loadingMore: false,
-      data: [],
-      form: this.$form.createForm(this)
-    }
-  },
-  mounted () {
-    this.getList()
-  },
-  methods: {
-    handleChange (value) {
-      console.log(`selected ${value}`)
-    },
-    getList () {
-      this.$http.get('/list/article').then(res => {
-        console.log('res', res)
-        this.data = res.result
-        this.loading = false
-      })
-    },
-    loadMore () {
-      this.loadingMore = true
-      this.$http.get('/list/article').then(res => {
-        this.data = this.data.concat(res.result)
-      }).finally(() => {
-        this.loadingMore = false
-      })
-    },
-    setOwner () {
-      const { form: { setFieldsValue } } = this
-      setFieldsValue({
-        owner: ['wzj']
-      })
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-.ant-pro-components-tag-select {
-  /deep/ .ant-pro-tag-select .ant-tag {
-    margin-right: 24px;
-    padding: 0 8px;
-    font-size: 14px;
-  }
-}
-
-.list-articles-trigger {
-  margin-left: 12px;
-}
-</style>

+ 0 - 168
src/views/list/search/Projects.vue

@@ -1,168 +0,0 @@
-<template>
-  <div>
-    <a-card :bordered="false" class="ant-pro-components-tag-select">
-      <a-form :form="form" layout="inline">
-        <standard-form-row title="所属类目" block style="padding-bottom: 11px;">
-          <a-form-item>
-            <tag-select>
-              <tag-select-option value="Category1">类目一</tag-select-option>
-              <tag-select-option value="Category2">类目二</tag-select-option>
-              <tag-select-option value="Category3">类目三</tag-select-option>
-              <tag-select-option value="Category4">类目四</tag-select-option>
-              <tag-select-option value="Category5">类目五</tag-select-option>
-              <tag-select-option value="Category6">类目六</tag-select-option>
-              <tag-select-option value="Category7">类目七</tag-select-option>
-              <tag-select-option value="Category8">类目八</tag-select-option>
-              <tag-select-option value="Category9">类目九</tag-select-option>
-              <tag-select-option value="Category10">类目十</tag-select-option>
-            </tag-select>
-          </a-form-item>
-        </standard-form-row>
-
-        <standard-form-row title="其它选项" grid last>
-          <a-row>
-            <a-col :lg="8" :md="10" :sm="10" :xs="24">
-              <a-form-item :wrapper-col="{ sm: { span: 16 }, xs: { span: 24 } }" label="作者">
-                <a-select
-                  style="max-width: 200px; width: 100%;"
-                  mode="multiple"
-                  placeholder="不限"
-                  v-decorator="['author']"
-                  @change="handleChange"
-                >
-                  <a-select-option value="lisa">王昭君</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-            <a-col :lg="8" :md="10" :sm="10" :xs="24">
-              <a-form-item :wrapper-col="{ sm: { span: 16 }, xs: { span: 24 } }" label="好评度">
-                <a-select
-                  style="max-width: 200px; width: 100%;"
-                  placeholder="不限"
-                  v-decorator="['rate']"
-                >
-                  <a-select-option value="good">优秀</a-select-option>
-                  <a-select-option value="normal">普通</a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-          </a-row>
-        </standard-form-row>
-      </a-form>
-    </a-card>
-
-    <div class="ant-pro-pages-list-projects-cardList">
-      <a-list :loading="loading" :data-source="data" :grid="{ gutter: 24, xl: 4, lg: 3, md: 3, sm: 2, xs: 1 }">
-        <a-list-item slot="renderItem" slot-scope="item">
-          <a-card class="ant-pro-pages-list-projects-card" hoverable>
-            <img slot="cover" :src="item.cover" :alt="item.title" />
-            <a-card-meta :title="item.title">
-              <template slot="description">
-                <ellipsis :length="50">{{ item.description }}</ellipsis>
-              </template>
-            </a-card-meta>
-            <div class="cardItemContent">
-              <span>{{ item.updatedAt | fromNow }}</span>
-              <div class="avatarList">
-                <avatar-list size="mini">
-                  <avatar-list-item
-                    v-for="(member, i) in item.members"
-                    :key="`${item.id}-avatar-${i}`"
-                    :src="member.avatar"
-                    :tips="member.name"
-                  />
-                </avatar-list>
-              </div>
-            </div>
-          </a-card>
-        </a-list-item>
-      </a-list>
-    </div>
-  </div>
-</template>
-
-<script>
-import moment from 'moment'
-import { TagSelect, StandardFormRow, Ellipsis, AvatarList } from '@/components'
-const TagSelectOption = TagSelect.Option
-const AvatarListItem = AvatarList.AvatarItem
-
-export default {
-  components: {
-    AvatarList,
-    AvatarListItem,
-    Ellipsis,
-    TagSelect,
-    TagSelectOption,
-    StandardFormRow
-  },
-  data () {
-    return {
-      data: [],
-      form: this.$form.createForm(this),
-      loading: true
-    }
-  },
-  filters: {
-    fromNow (date) {
-      return moment(date).fromNow()
-    }
-  },
-  mounted () {
-    this.getList()
-  },
-  methods: {
-    handleChange (value) {
-      console.log(`selected ${value}`)
-    },
-    getList () {
-      this.$http.get('/list/article', { params: { count: 8 } }).then(res => {
-        console.log('res', res)
-        this.data = res.result
-        this.loading = false
-      })
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-.ant-pro-components-tag-select {
-  /deep/ .ant-pro-tag-select .ant-tag {
-    margin-right: 24px;
-    padding: 0 8px;
-    font-size: 14px;
-  }
-}
-.ant-pro-pages-list-projects-cardList {
-  margin-top: 24px;
-
-  /deep/ .ant-card-meta-title {
-    margin-bottom: 4px;
-  }
-
-  /deep/ .ant-card-meta-description {
-    height: 44px;
-    overflow: hidden;
-    line-height: 22px;
-  }
-
-  .cardItemContent {
-    display: flex;
-    height: 20px;
-    margin-top: 16px;
-    margin-bottom: -4px;
-    line-height: 20px;
-
-    > span {
-      flex: 1 1;
-      color: rgba(0,0,0,.45);
-      font-size: 12px;
-    }
-
-    /deep/ .ant-pro-avatar-list {
-      flex: 0 1 auto;
-    }
-  }
-}
-</style>

+ 0 - 78
src/views/list/search/SearchLayout.vue

@@ -1,78 +0,0 @@
-<template>
-  <div class="search-content">
-    <router-view />
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'SearchLayout',
-  data () {
-    return {
-      tabs: {
-        items: [
-          {
-            key: '1',
-            title: '文章'
-          },
-          {
-            key: '2',
-            title: '项目'
-          },
-          {
-            key: '3',
-            title: '应用'
-          }
-        ],
-        active: () => {
-          switch (this.$route.path) {
-            case '/list/search/article':
-              return '1'
-            case '/list/search/project':
-              return '2'
-            case '/list/search/application':
-              return '3'
-            default:
-              return '1'
-          }
-        },
-        callback: (key) => {
-          switch (key) {
-            case '1':
-              this.$router.push('/list/search/article')
-              break
-            case '2':
-              this.$router.push('/list/search/project')
-              break
-            case '3':
-              this.$router.push('/list/search/application')
-              break
-            default:
-              this.$router.push('/workplace')
-          }
-        }
-      },
-      search: true
-    }
-  },
-  computed: {
-
-  },
-  methods: {
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .search-head{
-    background-color: #fff;
-    margin: -25px -24px -24px;
-    .search-input{
-      text-align: center;
-      margin-bottom: 16px;
-    }
-  }
-  .search-content{
-    margin-top: 48px;
-  }
-</style>

Some files were not shown because too many files changed in this diff