LAPTOP-16IUEB3P\Lenovo 3 лет назад
Родитель
Сommit
29583b7921

+ 4 - 60
package-lock.json

@@ -1666,15 +1666,12 @@
       "resolved": "https://registry.npmmirror.com/@types/parse5/-/parse5-6.0.3.tgz",
       "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
     },
-<<<<<<< HEAD
-=======
     "@types/q": {
       "version": "1.5.5",
       "resolved": "https://registry.npmmirror.com/@types/q/-/q-1.5.5.tgz",
       "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==",
       "dev": true
     },
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "@types/qs": {
       "version": "6.9.7",
       "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz",
@@ -2037,32 +2034,6 @@
         "webpack-merge": "^5.7.3",
         "webpack-virtual-modules": "^0.4.2",
         "whatwg-fetch": "^3.6.2"
-<<<<<<< HEAD
-=======
-      },
-      "dependencies": {
-        "@vue/vue-loader-v15": {
-          "version": "npm:vue-loader@15.10.1",
-          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.1.tgz",
-          "integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
-          "dev": true,
-          "requires": {
-            "@vue/component-compiler-utils": "^3.1.0",
-            "hash-sum": "^1.0.2",
-            "loader-utils": "^1.1.0",
-            "vue-hot-reload-api": "^2.3.0",
-            "vue-style-loader": "^4.1.0"
-          },
-          "dependencies": {
-            "hash-sum": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
-              "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
-              "dev": true
-            }
-          }
-        }
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
       }
     },
     "@vue/cli-shared-utils": {
@@ -2212,7 +2183,6 @@
         }
       }
     },
-<<<<<<< HEAD
     "@vue/vue-loader-v15": {
       "version": "npm:vue-loader@15.10.1",
       "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz",
@@ -2234,8 +2204,6 @@
         }
       }
     },
-=======
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "@vue/web-component-wrapper": {
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
@@ -2551,8 +2519,6 @@
       "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
       "dev": true
     },
-<<<<<<< HEAD
-=======
     "arr-diff": {
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz",
@@ -2581,7 +2547,6 @@
         "is-array-buffer": "^3.0.1"
       }
     },
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "array-flatten": {
       "version": "2.1.2",
       "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz",
@@ -2594,8 +2559,6 @@
       "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
       "dev": true
     },
-<<<<<<< HEAD
-=======
     "array-unique": {
       "version": "0.3.2",
       "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz",
@@ -2621,7 +2584,6 @@
       "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
       "dev": true
     },
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "async": {
       "version": "2.6.4",
       "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz",
@@ -2650,15 +2612,12 @@
       "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
       "dev": true
     },
-<<<<<<< HEAD
-=======
     "atob": {
       "version": "2.1.2",
       "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz",
       "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
       "dev": true
     },
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "autoprefixer": {
       "version": "10.4.8",
       "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.8.tgz",
@@ -2673,15 +2632,12 @@
         "postcss-value-parser": "^4.2.0"
       }
     },
-<<<<<<< HEAD
-=======
     "available-typed-arrays": {
       "version": "1.0.5",
       "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
       "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
       "dev": true
     },
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "axios": {
       "version": "0.27.2",
       "resolved": "https://registry.npmmirror.com/axios/-/axios-0.27.2.tgz",
@@ -2792,8 +2748,6 @@
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
       "dev": true
     },
-<<<<<<< HEAD
-=======
     "base": {
       "version": "0.11.2",
       "resolved": "https://registry.npmmirror.com/base/-/base-0.11.2.tgz",
@@ -2809,7 +2763,6 @@
         "pascalcase": "^0.1.1"
       }
     },
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "base64-js": {
       "version": "1.5.1",
       "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
@@ -3063,8 +3016,6 @@
       "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
       "dev": true
     },
-<<<<<<< HEAD
-=======
     "cache-base": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz",
@@ -3082,7 +3033,6 @@
         "unset-value": "^1.0.0"
       }
     },
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "call-bind": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
@@ -9957,7 +9907,7 @@
     },
     "shvl": {
       "version": "2.0.3",
-      "resolved": "https://registry.npmmirror.com/shvl/-/shvl-2.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz",
       "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
     },
     "side-channel": {
@@ -10290,15 +10240,12 @@
       "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
       "dev": true
     },
-<<<<<<< HEAD
-=======
     "strict-uri-encode": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
       "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==",
       "dev": true
     },
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "string-width": {
       "version": "4.2.3",
       "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
@@ -10310,8 +10257,6 @@
         "strip-ansi": "^6.0.1"
       }
     },
-<<<<<<< HEAD
-=======
     "string.prototype.trim": {
       "version": "1.2.7",
       "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
@@ -10345,7 +10290,6 @@
         "es-abstract": "^1.20.4"
       }
     },
->>>>>>> 33a1a8d1a265418b200ca2c39eb854da215a9986
     "string_decoder": {
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -11532,7 +11476,7 @@
     },
     "vue-hot-reload-api": {
       "version": "2.3.4",
-      "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
+      "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
       "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
       "dev": true
     },
@@ -11676,7 +11620,7 @@
     },
     "vuex-persistedstate": {
       "version": "4.1.0",
-      "resolved": "https://registry.npmmirror.com/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz",
       "integrity": "sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==",
       "requires": {
         "deepmerge": "^4.2.2",
@@ -11685,7 +11629,7 @@
       "dependencies": {
         "deepmerge": {
           "version": "4.3.1",
-          "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz",
+          "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
           "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="
         }
       }

+ 18 - 16
src/api/ledgerAssets/boat.js

@@ -11,7 +11,25 @@ export async function getBoatList (data) {
   return Promise.reject(new Error(res.data.message));
 }
 
+// 查询实例详情
+export async function getCategoryInfo (id) {
+  const res = await request.get(`/main/category/info/${id}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
 
+// 获取单个类别实体明细分页
+export async function getPageSingle (data) {
+  let par = new URLSearchParams(data);
+  const res = await request.get(`/main/asset/pageSingleSubstance?` + par, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
 
 
 
@@ -23,22 +41,6 @@ export async function getBoatList (data) {
 
 
 
-// 根据父级id查分类树
-export async function getTreeByPid (parentId) {
-  const res = await request.get(`/main/categoryLevel/getTreeByPid/${parentId}`);
-  if (res.data.code == 0) {
-    return res.data;
-  }
-  return Promise.reject(new Error(res.data.message));
-}
-// 根据类型查分类树
-export async function getTreeByType (type) {
-  const res = await request.get(`/main/categoryLevel/getTreeByType/${type}`);
-  if (res.data.code == 0) {
-    return res.data;
-  }
-  return Promise.reject(new Error(res.data.message));
-}
 
 // 删除分类
 export async function deleteCategory (id) {

+ 2 - 1
src/enum/dict.js

@@ -4,5 +4,6 @@ export default {
   分隔符: 'separate',
   任务类型: 'taskCategory',
   流程分类: 'processCategory',
-  角度: 'angle'
+  角度: 'angle',
+  生命周期: 'life_cycle',
 };

+ 3 - 3
src/views/codeManagement/components/addDialog.vue

@@ -194,14 +194,14 @@
             .then((res) => {
               console.log('res', res);
               this.loading = false;
-              this.addRoleDialog = false;
+              // this.addRoleDialog = false;
               this.$message.success(res);
               this.$emit('done');
-              this.restForm();
+              this.handleClose();
             })
             .catch((e) => {
               this.loading = false;
-              this.$message.error(e.message);
+              // this.$message.error(e.message);
             });
         });
       },

+ 48 - 65
src/views/ledgerAssets/boat/components/baseInfo.vue

@@ -5,12 +5,12 @@
     </div>
     <el-descriptions title="" :column="4" size="medium" border>
       <el-descriptions-item>
-        <template slot="label"> 物品编码 </template>
-        {{ information.informationCode }}
+        <template slot="label"> 类别编码 </template>
+        {{ information.code }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 舟皿名称 </template>
-        {{ information.informationName }}
+        {{ information.name }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 型号</template>
@@ -22,7 +22,7 @@
       </el-descriptions-item>
       <el-descriptions-item :span="2">
         <template slot="label"> 分类 </template>
-        {{information.classificationUrl}}
+        {{information.categoryLevelPath}}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 长/宽/高(mm) </template>
@@ -49,7 +49,8 @@
          :header-cell-style="{ background: '#F0F3F3', border: 'none'}"
       >
            <el-table-column type="index" label="序号"  width="100"> </el-table-column>
-           <el-table-column prop="assetCode" label="舟皿编码" > </el-table-column>
+           <el-table-column prop="code" label="编码" > </el-table-column>
+           <el-table-column prop="name" label="名称" > </el-table-column>
            <el-table-column prop="inCode" label="入库单号" v-if="activeName=='inLibrary'"> </el-table-column>
            <el-table-column prop="inTime" label="入库时间" v-if="activeName=='inLibrary'"> </el-table-column>
            <el-table-column prop="outCode" label="出库单号" v-if="activeName!='inLibrary'"> </el-table-column>
@@ -62,7 +63,7 @@
           :total="total"
           :page-sizes="[15, 30, 50, 100, 500]"
           :page-size="pagination.size"
-          :current-page.sync="pagination.page"
+          :current-page.sync="pagination.pageNum"
           @current-change="handleCurrent"
           @size-change="handleSize"
         >
@@ -73,78 +74,63 @@
 </template>
 
 <script>
-// import {
-//   getDetails
-// } from '@/api/stockManagement/itemInformation'
-// import {getAssetPage , getCount} from "@/api/ledgerAssets/asset"
+  import {
+    getCategoryInfo,
+    getPageSingle
+  } from '@/api/ledgerAssets/boat.js';
 export default {
   props: {
-    rowInfo:{
-      type:Object ,
-      default:{}
+    rowId:{
+      type:String ,
+      default:''
     },
   },
   data () {
     return {
-      baseOpt: [
-        { label: '物品编码', key: 'informationCode' },
-        { label: '舟皿名称', key: 'informationName' },
-        { label: '型号', key: 'modelType' },
-        { label: '规格', key: 'specification' },
-        { label: '分类', key: 'classificationUrl', span: 2 },
-        { label: '长/宽/高(mm)', key: 'mm' },
-        { label: '计量单位', key: 'measuringUnit' },
-      ],
       information:{
         extendField:{}
       },
       activeName:'inUse',
       tableData:[],
       pagination: {
-        page: 1,
+        pageNum: 1,
         size: 15
       },
       total: 0,
       searchForm:{
-        assetType:'ZHOUMIN',
-        informationId:'',
-        source:1
+        categoryId:this.rowId,
+        positionType:1
       },
       countInfo:{}
 
     }
-  },
-  watch:{
-
-
   },
   created () {
-    // this.searchForm.informationId = this.rowInfo.id
-    // this.getDetilInfo(this.rowInfo.id)
-    // this.handleList()
+    this.getDetilInfo()
+    this.handleList()
     // this.getCountNum()
   },
   methods:{
-     async getDetilInfo(id){
-       const res = await getDetails({id:id})
-       if (res.success){
+     getDetilInfo(){
+       getCategoryInfo(this.rowId).then(res=>{
           this.information = res.data
-          this.$set(this.information, 'extendField', JSON.parse(res.data.extendField))
-       }
+          if(res.data.extendField){
+            this.$set(this.information, 'extendField', JSON.parse(res.data.extendField))
+          }
+       })
      },
-
      tabClick(val){
         switch (this.activeName) {
           case 'inUse': {
-            this.searchForm.source = 1
+            this.searchForm.positionType = 1
             break;
           }
           case 'inLibrary': {
-            this.searchForm.source = 2
+            this.searchForm.positionType = 2
             break;
           }
           case 'hasConsume': {
-            this.searchForm.source = 3
+            this.searchForm.positionType = 3
             break;
           }
           default:
@@ -154,35 +140,25 @@ export default {
      },
 
      handleCurrent (page) {
-       this.pagination.page = page
+       this.pagination.pageNum = page
        this.handleList()
      },
      handleSize (size) {
-       this.pagination.page = 1
+       this.pagination.pageNum = 1
        this.pagination.size = size
        this.handleList()
      },
 
-     async handleList () {
-       const params = {
-         ...this.searchForm,
-         ...this.pagination
-       }
-       const res = await getAssetPage(params)
-       if (res?.success) {
-         this.tableData = res.data.records
-         this.total = res.data.total
-         // if(this.tableData.length)  this.$refs.tableRef.clearSelection()
-         // this.$nextTick(() => {
-         //     this.mapList.forEach(item => {
-         //       const row = this.tableData.find(i => i.id === item.id)
-         //       if (row) {
-         //         this.$refs.tableRef.toggleRowSelection(row, true)
-         //       }
-         //     })
-         // })
-       }
-     },
+      handleList () {
+         const params = {
+           ...this.searchForm,
+           ...this.pagination
+         }
+         getPageSingle(params).then(res=>{
+             
+         })
+
+      },
 
      getCountNum(){
        const params = {
@@ -197,7 +173,14 @@ export default {
      }
 
 
-  }
+  },
+
+  watch:{
+    // 监听类别id变化
+    // rowId() {
+    //   this.getDetilInfo()
+    // }
+  },
 
 }
 </script>

+ 13 - 24
src/views/ledgerAssets/boat/components/boat-list.vue

@@ -15,23 +15,11 @@
         <boat-search @search="reload">
         </boat-search>
       </template>
-      <!-- 角色列 -->
-      <template v-slot:roles="{ row }">
-        <el-tag
-          v-for="item in row.roles"
-          :key="item.roleId"
-          type="primary"
-          size="mini"
-          :disable-transitions="true"
-        >
-          {{ item.roleName }}
-        </el-tag>
-      </template>
-      <!-- 状态列 -->
+      <!-- 编码列 -->
       <template v-slot:code="{ row }">
-        <el-link
-          @click="details(row)"
-         >{{ row.code }}</el-link>
+        <el-link @click="details(row)">
+          {{ row.code }}
+        </el-link>
       </template>
     </ele-pro-table>
   </div>
@@ -66,7 +54,8 @@
             prop: 'code',
             label: '类别编码',
             showOverflowTooltip: true,
-            minWidth: 110
+            minWidth: 110,
+            slot: 'code',
           },
           {
             prop: 'name',
@@ -92,12 +81,12 @@
             showOverflowTooltip: true,
             minWidth: 110
           },
-          // {
-          //   prop: 'angle',
-          //   label: '长*宽*高',
-          //   showOverflowTooltip: true,
-          //   minWidth: 110
-          // },
+          {
+            prop: 'width',
+            label: '长*宽*高',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
           {
             prop: 'categoryLevelPath',
             label: '分类',
@@ -150,7 +139,7 @@
       // 跳转到详情页
       details ({ id }) {
         this.$router.push({
-          path: '/ledgerAssets/material/detail',
+          path: '/ledgerAssets/boat/detail',
           query: {
             id
           }

+ 4 - 4
src/views/ledgerAssets/boat/detail.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <!-- tab切换 -->
-<!--    <div class="switch">
+<!--   <div class="switch">
       <div class="switch_left">
         <ul>
           <li
@@ -17,7 +17,7 @@
       </div>
     </div> -->
     <div class="content-wrapper">
-      <component :is="activeComp" :rowInfo="rowInfo"></component>
+      <component :is="activeComp" :rowId="rowId"></component>
     </div>
   </div>
 </template>
@@ -34,11 +34,11 @@ export default {
       tabOptions: [
         { key: 'baseInfo', name: '舟皿信息' },
       ],
-      rowInfo:null,
+      rowId:null,
     }
   },
   created () {
-     // this.rowInfo = JSON.parse(this.$route.query.row)
+     this.rowId = this.$route.query.id
   },
   methods:{
      // async getDetilInfo(id){

+ 311 - 137
src/views/ledgerAssets/material/components/baseInfo.vue

@@ -9,51 +9,135 @@
         {{ information.informationCode }}
       </el-descriptions-item>
       <el-descriptions-item>
-        <template slot="label"> 舟皿名称 </template>
+        <template slot="label"> 原料名称 </template>
         {{ information.informationName }}
       </el-descriptions-item>
       <el-descriptions-item>
-        <template slot="label"> 型号</template>
-        {{ information.modelType }}
+        <template slot="label"> 牌号</template>
+        {{ information.brandNum }}
       </el-descriptions-item>
       <el-descriptions-item>
-        <template slot="label"> 规格 </template>
-        {{ information.specification }}
-      </el-descriptions-item>
-      <el-descriptions-item :span="2">
-        <template slot="label"> 分类 </template>
-        {{information.classificationUrl}}
+        <template slot="label"> 计量单位 </template>
+        {{ information.measuringUnit }}
       </el-descriptions-item>
       <el-descriptions-item>
-        <template slot="label"> 长/宽/高(mm) </template>
-        {{information.extendField.length}}/{{information.extendField.width}}/{{information.extendField.high}}
+        <template slot="label"> 包装单位 </template>
+        {{ information.packingUnit }}
       </el-descriptions-item>
-      <el-descriptions-item>
-        <template slot="label"> 计量单位</template>
-        {{information.measuringUnit}}
+      <el-descriptions-item :span="2">
+        <template slot="label"> 分类 </template>
+        {{ information.classificationUrl }}
       </el-descriptions-item>
     </el-descriptions>
+
     <div class="basic-details-title border-none">
-      <span class="border-span">舟皿明细</span>
+      <span class="border-span">原料明细</span>
     </div>
     <div>
-      <el-tabs v-model="activeName" type="card" @tab-click="tabClick" class="basic-tab">
-          <el-tab-pane :label="`在用(${countInfo.inUseSum?countInfo.inUseSum:'0'})`" name="inUse" >
+      <el-form label-width="80px" :model="searchForm" ref="formName">
+        <el-row>
+          <el-col :md="6" :xs="8" :sm="8">
+            <el-form-item
+              :label="activeName == 'inLibrary' ? '入库单号' : '出库单号'"
+              prop=""
+            >
+              <el-input
+                type="text"
+                size="small"
+                placeholder="请输入"
+                v-model="searchForm.outInCode"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :md="6" :xs="8" :sm="8">
+            <el-form-item label="批次号" prop="">
+              <el-input
+                type="text"
+                size="small"
+                placeholder="请输入"
+                v-model="searchForm.batchNum"
+              ></el-input
+            ></el-form-item>
+          </el-col>
+          <el-col :md="12" :xs="12" :sm="12" style="text-align: right">
+            <el-button icon="el-icon-refresh-left" size="small" @click="reset"
+              >重置</el-button
+            >
+            <el-button
+              type="primary"
+              icon="el-icon-search"
+              size="small"
+              @click="doSearch"
+              >搜索</el-button
+            >
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <div class="tabbox">
+        <el-tabs v-model="activeName" type="card" @tab-click="tabClick">
+          <el-tab-pane
+            :label="`在用(${countInfo.inUseSum ? countInfo.inUseSum : '0'})`"
+            name="inUse"
+          >
           </el-tab-pane>
-          <el-tab-pane :label="`在库(${countInfo.inLibrarySum?countInfo.inLibrarySum:'0'})`" name="inLibrary">
+          <el-tab-pane
+            :label="`在库(${
+              countInfo.inLibrarySum ? countInfo.inLibrarySum : '0'
+            })`"
+            name="inLibrary"
+          >
           </el-tab-pane>
-          <el-tab-pane :label="`消耗(${countInfo.consumeSum?countInfo.consumeSum:'0'})`" name="hasConsume">
+          <el-tab-pane
+            :label="`消耗(${
+              countInfo.consumeSum ? countInfo.consumeSum : '0'
+            })`"
+            name="hasConsume"
+          >
           </el-tab-pane>
-      </el-tabs>
-      <el-table :data="tableData" class="table-box"
-         :header-cell-style="{ background: '#F0F3F3', border: 'none'}"
+        </el-tabs>
+        <el-button icon="el-icon-printer" size="small" @click="handlPrint"
+          >打印条码</el-button
+        >
+      </div>
+      <el-table
+        :data="tableData"
+        class="table-box"
+        :header-cell-style="{ background: '#F0F3F3', border: 'none' }"
+        @selection-change="handleSelectionChange"
       >
-           <el-table-column type="index" label="序号"  width="100"> </el-table-column>
-           <el-table-column prop="assetCode" label="舟皿编码" > </el-table-column>
-           <el-table-column prop="inCode" label="入库单号" v-if="activeName=='inLibrary'"> </el-table-column>
-           <el-table-column prop="inTime" label="入库时间" v-if="activeName=='inLibrary'"> </el-table-column>
-           <el-table-column prop="outCode" label="出库单号" v-if="activeName!='inLibrary'"> </el-table-column>
-           <el-table-column prop="outTime" label="出库时间" v-if="activeName!='inLibrary'"> </el-table-column>
+        <el-table-column type="selection" width="55"> </el-table-column>
+        <el-table-column type="index" label="序号" width="100">
+        </el-table-column>
+        <el-table-column prop="assetCode" label="原料编码"> </el-table-column>
+        <el-table-column prop="batchNum" label="批次号"> </el-table-column>
+        <el-table-column prop="bucketNum" label="包装编码"> </el-table-column>
+        <el-table-column prop="minPackUnit" label="最小包装单元">
+        </el-table-column>
+        <el-table-column
+          prop="outCode"
+          label="出库单号"
+          v-if="activeName != 'inLibrary'"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="outTime"
+          label="出库时间"
+          v-if="activeName != 'inLibrary'"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="inCode"
+          label="入库单号"
+          v-if="activeName == 'inLibrary'"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="inTime"
+          label="入库时间"
+          v-if="activeName == 'inLibrary'"
+        >
+        </el-table-column>
       </el-table>
       <div class="pagination">
         <el-pagination
@@ -69,152 +153,242 @@
         </el-pagination>
       </div>
     </div>
+
+<!--    <QrPrint
+      ref="QrPrint"
+      @close="QrPrintClose"
+      :config="barCodeConfig"
+      :openBarCode.sync="openWindows"
+    /> -->
   </div>
 </template>
 
 <script>
-// import {
-//   getDetails
-// } from '@/api/stockManagement/itemInformation'
-// import {getAssetPage , getCount} from "@/api/ledgerAssets/asset"
+// import { getDetails } from '@/api/stockManagement/itemInformation'
+// import { getAssetPage, getCount } from '@/api/ledgerAssets/asset'
+// import { batchBarPrint } from '@/api/ledgerAssets/booksList'
+// import QrPrint from '@/components/print/printPDF.vue'
+  import {
+    getCategoryInfo
+  } from '@/api/ledgerAssets/boat.js';
 export default {
   props: {
-    rowInfo:{
-      type:Object ,
-      default:{}
-    },
+     rowId:{
+       type:String ,
+       default:''
+     },
   },
+  // components: { QrPrint },
   data () {
     return {
-      baseOpt: [
-        { label: '物品编码', key: 'informationCode' },
-        { label: '舟皿名称', key: 'informationName' },
-        { label: '型号', key: 'modelType' },
-        { label: '规格', key: 'specification' },
-        { label: '分类', key: 'classificationUrl', span: 2 },
-        { label: '长/宽/高(mm)', key: 'mm' },
-        { label: '计量单位', key: 'measuringUnit' },
-      ],
-      information:{
-        extendField:{}
+      information: {
+        extendField: {}
       },
-      activeName:'inUse',
-      tableData:[],
+      activeName: 'inUse',
+      tableData: [],
       pagination: {
         page: 1,
         size: 15
       },
       total: 0,
-      searchForm:{
-        assetType:'ZHOUMIN',
-        informationId:'',
-        source:1
+      searchForm: {
+        assetType: 'WULIAO',
+        informationId: '',
+        source: 1
       },
-      countInfo:{}
-
+      multipleSelection: [],
+      openWindows: false, //打印弹窗
+      barCodeConfig: [],
+      source: 1,
+      countInfo: {}
     }
   },
-  watch:{
-
-
-  },
+  watch: {},
   created () {
+    this.getDetilInfo()
     // this.searchForm.informationId = this.rowInfo.id
     // this.getDetilInfo(this.rowInfo.id)
     // this.handleList()
     // this.getCountNum()
   },
-  methods:{
-     async getDetilInfo(id){
-       const res = await getDetails({id:id})
-       if (res.success){
-          this.information = res.data
-          this.$set(this.information, 'extendField', JSON.parse(res.data.extendField))
-       }
-     },
+  methods: {
+    getDetilInfo(){
+      getCategoryInfo(this.rowId).then(res=>{
+         this.information = res.data
+         if(res.data.extendField){
+           this.$set(this.information, 'extendField', JSON.parse(res.data.extendField))
+         }
+      })
+    },
 
-     tabClick(val){
-        switch (this.activeName) {
-          case 'inUse': {
-            this.searchForm.source = 1
-            break;
-          }
-          case 'inLibrary': {
-            this.searchForm.source = 2
-            break;
-          }
-          case 'hasConsume': {
-            this.searchForm.source = 3
-            break;
-          }
-          default:
-            break;
+    tabClick (val) {
+      switch (this.activeName) {
+        case 'inUse': {
+          this.source = 1
+          break
         }
-        this.handleList()
-     },
+        case 'inLibrary': {
+          this.source = 2
+          break
+        }
+        case 'hasConsume': {
+          this.source = 3
+          break
+        }
+        default:
+          break
+      }
+      this.searchForm.source = this.source
+      this.handleList()
+    },
 
-     handleCurrent (page) {
-       this.pagination.page = page
-       this.handleList()
-     },
-     handleSize (size) {
-       this.pagination.page = 1
-       this.pagination.size = size
-       this.handleList()
-     },
+    handleCurrent (page) {
+      this.pagination.page = page
+      this.handleList()
+    },
+    handleSize (size) {
+      this.pagination.page = 1
+      this.pagination.size = size
+      this.handleList()
+    },
 
-     async handleList () {
-       const params = {
-         ...this.searchForm,
-         ...this.pagination
-       }
-       const res = await getAssetPage(params)
-       if (res?.success) {
-         this.tableData = res.data.records
-         this.total = res.data.total
-         // if(this.tableData.length)  this.$refs.tableRef.clearSelection()
-         // this.$nextTick(() => {
-         //     this.mapList.forEach(item => {
-         //       const row = this.tableData.find(i => i.id === item.id)
-         //       if (row) {
-         //         this.$refs.tableRef.toggleRowSelection(row, true)
-         //       }
-         //     })
-         // })
-       }
-     },
+    // 搜索
+    doSearch () {
+      this.pagination.page = 1
+      this.handleList()
+    },
+    // 重置
+    reset () {
+      this.searchForm = {
+        assetType: 'WULIAO',
+        informationId: this.rowInfo.id,
+        source: this.source
+      }
+      this.doSearch()
+    },
+
+    async handleList () {
+      const params = {
+        ...this.searchForm,
+        ...this.pagination
+      }
+      const res = await getAssetPage(params)
+      if (res?.success) {
+        this.tableData = res.data.records
+        this.total = res.data.total
+      }
+    },
 
-     getCountNum(){
-       const params = {
-           assetType:'ZHOUMIN',
-           informationId:this.rowInfo.id
-       }
-       getCount(params).then(res=>{
-           if(res?.success){
-               this.countInfo = res.data
-           }
-       })
-     }
+    handleSelectionChange (val) {
+      this.multipleSelection = val
+    },
 
+    QrPrintClose () {
+      this.barCodeConfig = []
+    },
 
-  }
+    async handlPrint () {
+      this.openWindows = true
+      const barType = 4
+      let params = this.multipleSelection.map(item => {
+        return {
+          barType: barType,
+          bizId: item.id
+        }
+      })
+      let _this = this
+      const res = await batchBarPrint(params)
+      async function getResList () {
+        for (const el of res.data) {
+          const fontTypeObj = { 1: '宋体', 2: '微软雅黑', 3: 'Arial' }
+          let item = el
+          item.useModeList = item.useModeList.sort((a, b) => {
+            return a.barAvg.substr(4) - b.barAvg.substr(4)
+          })
+          const useModeList = item.useModeList
+          // 条码框数据
+          _this.barCodeConfig.push({
+            putType: el.putType,
+            qrCode: el.qrCode,
+            sizeLong: el.sizeLong,
+            sizeWide: el.sizeWide,
+            code1: useModeList[0].sampleData,
+            code2: useModeList[1].sampleData,
+            code3: useModeList[2].sampleData,
+            code4: useModeList[3].sampleData,
+            code5: useModeList[4].sampleData,
+            code6: useModeList[5].sampleData,
+            code7: useModeList[6].sampleData,
+            code8: useModeList[7].sampleData,
+            code9: useModeList[8].sampleData,
+            code10: useModeList[9].sampleData,
+            code11: useModeList[10].sampleData,
+            code12: useModeList[11].sampleData,
+            code13: useModeList[12].sampleData,
+            code14: useModeList[13].sampleData,
+            fontSizeCode1: useModeList[0].fontSize,
+            fontSizeCode2: useModeList[1].fontSize,
+            fontSizeCode3: useModeList[2].fontSize,
+            fontSizeCode4: useModeList[3].fontSize,
+            fontSizeCode5: useModeList[4].fontSize,
+            fontSizeCode6: useModeList[5].fontSize,
+            fontSizeCode7: useModeList[6].fontSize,
+            fontSizeCode8: useModeList[7].fontSize,
+            fontSizeCode9: useModeList[8].fontSize,
+            fontSizeCode10: useModeList[9].fontSize,
+            fontSizeCode11: useModeList[10].fontSize,
+            fontSizeCode12: useModeList[11].fontSize,
+            fontSizeCode13: useModeList[12].fontSize,
+            fontSizeCode14: useModeList[13].fontSize,
+            typefaceCode1: fontTypeObj[useModeList[0].fontType],
+            typefaceCode2: fontTypeObj[useModeList[1].fontType],
+            typefaceCode3: fontTypeObj[useModeList[2].fontType],
+            typefaceCode4: fontTypeObj[useModeList[3].fontType],
+            typefaceCode5: fontTypeObj[useModeList[4].fontType],
+            typefaceCode6: fontTypeObj[useModeList[5].fontType],
+            typefaceCode7: fontTypeObj[useModeList[6].fontType],
+            typefaceCode8: fontTypeObj[useModeList[7].fontType],
+            typefaceCode9: fontTypeObj[useModeList[8].fontType],
+            typefaceCode10: fontTypeObj[useModeList[9].fontType],
+            typefaceCode11: fontTypeObj[useModeList[10].fontType],
+            typefaceCode12: fontTypeObj[useModeList[11].fontType],
+            typefaceCode13: fontTypeObj[useModeList[12].fontType],
+            typefaceCode14: fontTypeObj[useModeList[13].fontType]
+          })
+        }
+      }
+      getResList()
+    },
 
+    getCountNum () {
+      const params = {
+        assetType: 'WULIAO',
+        informationId: this.rowInfo.id,
+        outInCode: this.searchForm.outInCode,
+        batchNum: this.searchForm.batchNum
+      }
+      getCount(params).then(res => {
+        if (res?.success) {
+          this.countInfo = res.data
+        }
+      })
+    }
+  }
 }
 </script>
 
 <style lang="scss" scoped>
- .baseinfo-container {
-    background-color: #fff;
-    padding: 20px;
-    .content {
-      padding: 0 20px;
-    }
-  .basic-details-title{
-    font-size: 16px;
-    margin: 15px 0;
+.baseinfo-container {
+  background-color: #fff;
+  padding: 20px;
+  .tabbox {
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
   }
-  .basic-tab{
-    margin-bottom: 15px;
+  .content {
+    padding: 0 20px;
   }
   .upload-container {
     display: flex;

+ 6 - 17
src/views/ledgerAssets/material/components/material-list.vue

@@ -15,23 +15,11 @@
         <material-search @search="reload">
         </material-search>
       </template>
-      <!-- 角色列 -->
-      <template v-slot:roles="{ row }">
-        <el-tag
-          v-for="item in row.roles"
-          :key="item.roleId"
-          type="primary"
-          size="mini"
-          :disable-transitions="true"
-        >
-          {{ item.roleName }}
-        </el-tag>
-      </template>
-      <!-- 状态列 -->
+      <!-- 编码列 -->
       <template v-slot:code="{ row }">
-        <el-link
-          @click="details(row)"
-         >{{ row.code }}</el-link>
+        <el-link @click="details(row)">
+          {{ row.code }}
+        </el-link>
       </template>
     </ele-pro-table>
   </div>
@@ -66,7 +54,8 @@
             prop: 'code',
             label: '类别编码',
             showOverflowTooltip: true,
-            minWidth: 110
+            minWidth: 110,
+            slot: 'code',
           },
           {
             prop: 'name',

+ 3 - 3
src/views/ledgerAssets/material/detail.vue

@@ -17,7 +17,7 @@
       </div>
     </div> -->
     <div class="content-wrapper">
-      <component :is="activeComp" :rowInfo="rowInfo"></component>
+      <component :is="activeComp" :rowId="rowId"></component>
     </div>
   </div>
 </template>
@@ -34,11 +34,11 @@ export default {
       tabOptions: [
         { key: 'baseInfo', name: '舟皿信息' },
       ],
-      rowInfo:null,
+      rowId:null,
     }
   },
   created () {
-     // this.rowInfo = JSON.parse(this.$route.query.row)
+     this.rowId = this.$route.query.id
   },
   methods:{
      // async getDetilInfo(id){

+ 1 - 1
src/views/ledgerAssets/material/index.vue

@@ -10,7 +10,7 @@
            <div class="ele-border-lighter sys-organization-list">
              <AssetTree
                @handleNodeClick="handleNodeClick"
-               :type="'2'"
+               :type="'3'"
                :paramsType="'type'"
                ref="treeList"
              />

+ 244 - 0
src/views/ledgerAssets/turnoverCar/components/baseInfo.vue

@@ -0,0 +1,244 @@
+<template>
+  <div class="baseinfo-container">
+    <div class="basic-details-title border-none">
+      <span class="border-span">基本信息</span>
+    </div>
+    <el-descriptions title="" :column="4" size="medium" border>
+      <el-descriptions-item>
+        <template slot="label"> 周转编码 </template>
+        {{ info.assetCode }}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 周转车名称 </template>
+        {{ info.assetName }}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 材质</template>
+        {{info.extraInfo.texture?info.extraInfo.texture:''}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 型号 </template>
+        {{info.information.modelType}}
+      </el-descriptions-item>
+      <el-descriptions-item :span="2">
+        <template slot="label"> 分类 </template>
+        {{info.information.classificationUrl}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 采购日期 </template>
+       {{info.warehouseDetail.procurementTime}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 过保日期</template>
+        {{info.warehouseDetail.expirationTime}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 计量单位</template>
+        {{info.information.measuringUnit}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 生命周期</template>
+        <div v-if="queryInfo.source==1" style="color: #70B603">在用</div>
+        <div v-if="queryInfo.source==2" style="color: #F59A23">在库</div>
+        <div v-if="queryInfo.source==3" style="color: #AAAAAA">消耗</div>
+      </el-descriptions-item>
+    </el-descriptions>
+
+    <div class="basic-details-title border-none">
+      <span class="border-span">投产信息</span>
+    </div>
+    <el-descriptions title="" :column="4" size="medium" border>
+      <el-descriptions-item>
+        <template slot="label"> 固资编码 </template>
+        {{info.fixAssetCode}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 品牌 </template>
+        {{info.brand}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 供应商</template>
+        {{info.supplierName}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 供应商电话 </template>
+        {{info.supplierMobile}}
+      </el-descriptions-item>
+      <el-descriptions-item :span="2">
+        <template slot="label"> {{queryInfo.source==2?'入库单号':'出库单号'}} </template>
+        <el-link style="color: #70B603" @click="jumpDetails">{{info.warehouseDetail.bizNum}}</el-link>
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 所在部门 </template>
+        {{info.ownershipDeptName}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 所在工序</template>
+        {{info.processName}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 权属部门 </template>
+        {{info.ownershipDeptName}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 当前权属人</template>
+        {{info.ownershipUserName}}
+      </el-descriptions-item>
+      <el-descriptions-item>
+        <template slot="label"> 权属人电话</template>
+        {{info.ownershipUserMobile}}
+      </el-descriptions-item>
+    </el-descriptions>
+    <div class="basic-details-title border-none">
+      <span class="border-span">图文信息</span>
+    </div>
+<!--    <div class="upload-container">
+       <div class="img-box">
+         <img
+           src="~@/assets/img/upload-placeholder.svg"
+           alt=""
+           v-if="!imageUrl"
+         />
+         <img v-else :src="imageUrl" alt="周转车图片" />
+       </div>
+    </div> -->
+    <div class="basic-details-title border-none">
+      <span class="border-span">扩展信息</span>
+    </div>
+    <el-descriptions title="" :column="4" size="medium" border>
+      <el-descriptions-item
+        v-for="(item, index) in info.extendField"
+        :key="index"
+        :span="1"
+      >
+        <template slot="label"> {{ item.key }} </template>
+        <div>{{item.value}}</div>
+      </el-descriptions-item>
+    </el-descriptions>
+
+    <DetailsDialog
+      ref="detailsDialogRef"
+    />
+  </div>
+</template>
+
+<script>
+// import {getAssetInfo} from "@/api/ledgerAssets/asset"
+// import DetailsDialog from '@/views/ledgerAssets/components/outstoreDetailsDialog.vue'
+// import { imageView } from "@/utils"
+export default {
+  props: {
+    queryInfo:{
+      type:Object,
+      default:{}
+    },
+  },
+  // components: { DetailsDialog },
+  data () {
+    return {
+      baseOpt: [
+        { label: '周转编码', key: 'assetCode' },
+        { label: '周转车名称', key: 'assetName' },
+        { label: '材质', key: 'texture' },
+        { label: '型号', key: 'modelType' },
+        { label: '分类', key: 'classificationUrl', span: 2 },
+        { label: '采购日期', key: 'procurementTime' },
+        { label: '过保日期', key: 'expirationTime' },
+        { label: '计量单位', key: 'measuringUnit' },
+        { label: '生命周期', key: 'source' }
+      ],
+      prodOpt: [
+        { label: '固资编码', key: 'fixAssetCode' },
+        { label: '品牌', key: 'brand' },
+        { label: '供应商', key: 'supplierName' },
+        { label: '供应商电话', key: 'supplierMobile' },
+        { label: '出库单号', key: 'bizNum' },
+        { label: '所在部门', key: 'ownershipDeptName' },
+        { label: '所在工序', key: 'processName' },
+        { label: '当前权属人', key: 'ownershipUserName' },
+        { label: '权属人电话', key: 'ownershipUserMobile' },
+        // { label: '生产订单号', key: '' },
+        // { label: '舟皿数量', key: ''},
+        // { label: '产品数量', key: '' },
+      ],
+      fileList: [
+        { name: '使用说明书' },
+        { name: '生产许可证书' },
+        { name: '防爆合格证书' },
+        { name: '检验报告' },
+        { name: '检验周期说明' },
+        { name: '图纸资料' },
+        { name: '产品合格证' }
+      ],
+      info:{
+        information:{},
+        warehouseDetail:{},
+        extendField:[],
+        extraInfo:{},
+      },
+      // 设备图片
+      imageUrl: "",
+
+    }
+  },
+  created () {
+     let id = this.queryInfo.id
+     this.getDetilInfo(id)
+  },
+  methods:{
+     async getDetilInfo(id){
+       const res = await getAssetInfo({id:id})
+       if (res.success){
+          this.info = res.data
+          this.$set(this.info, 'information', res.data.information)
+          this.$set(this.info, 'warehouseDetail', res.data.warehouseDetail)
+          this.$set(this.info, 'extraInfo', JSON.parse(res.data.information.extendField))
+          this.$set(this.info, 'extendField', JSON.parse(res.data.extendField))
+          if (res.data.imageUrl) {
+            imageView(res.data.imageUrl).then((res) => {
+              this.imageUrl = res;
+            });
+          }
+       }
+     },
+     // 打开详情弹窗
+     jumpDetails(){
+       if(!this.info.warehouseDetail){
+         return
+       }
+        this.$refs.detailsDialogRef.init(this.info.warehouseDetail,this.queryInfo.source)
+     }
+
+
+
+
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep.baseinfo-container {
+  background-color: #fff;
+  padding: 20px;
+  .content {
+    padding: 0 20px;
+  }
+  .upload-container {
+    width:100%;
+    display: flex;
+    align-items:center;
+    justify-content:center;
+    .img-box {
+      width: 280px;
+      height: 342px;
+      border: 1px solid rgba(215, 215, 215, 1);
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      img {
+        max-width: 100%;
+      }
+    }
+  }
+}
+</style>

+ 155 - 0
src/views/ledgerAssets/turnoverCar/components/turnovercar-list.vue

@@ -0,0 +1,155 @@
+<template>
+  <div>
+    <!-- 数据表格 -->
+    <ele-pro-table
+      ref="table"
+      :columns="columns"
+      :datasource="datasource"
+      height="calc(100vh - 265px)"
+      full-height="calc(100vh - 116px)"
+      tool-class="ele-toolbar-form"
+      cache-key="systemOrgUserTable"
+    >
+      <!-- 表头工具栏 -->
+      <template v-slot:toolbar>
+        <turnovercar-search @search="reload">
+        </turnovercar-search>
+        <div>
+          <el-checkbox v-model="checked">显示已消耗</el-checkbox>
+          <el-button
+           size="small"
+           type="primary"
+           icon="el-icon-download"
+           class="ele-btn-icon"
+         >
+           导出
+         </el-button>
+        </div>
+      </template>
+      <!-- 编码列 -->
+      <template v-slot:code="{ row }">
+        <el-link @click="details(row)">
+          {{ row.code }}
+        </el-link>
+      </template>
+    </ele-pro-table>
+  </div>
+</template>
+
+<script>
+  import TurnovercarSearch from './turnovercar-search.vue';
+  import {
+    getBoatList
+  } from '@/api/ledgerAssets/boat.js';
+
+  export default {
+    components: { TurnovercarSearch },
+    props: {
+      // 类别id
+      rootId: [Number, String],
+    },
+    data() {
+      return {
+        // 表格列配置
+        columns: [
+          {
+            columnKey: 'index',
+            type: 'index',
+            label: '序号',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'code',
+            label: '类别编码',
+            showOverflowTooltip: true,
+            minWidth: 110,
+            slot: 'code'
+          },
+          {
+            prop: 'name',
+            label: '类别名称',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'brandNum',
+            label: '牌号',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'categoryLevelPath',
+            label: '分类',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'inUseSum',
+            label: '在用',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'inLibrarySum',
+            label: '在库',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'consumeSum',
+            label: '消耗',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'totalSum',
+            label: '总数量',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+        ],
+        checked:false
+      };
+    },
+    methods: {
+      /* 表格数据源 */
+      datasource({ page, limit, where, order }) {
+        return getBoatList({
+          ...where,
+          ...order,
+          pageNum: page,
+          size: limit,
+          rootCategoryLevelId: this.rootId
+        });
+      },
+      /* 刷新表格 */
+      reload(where) {
+        this.$refs.table.reload({ pageNum: 1, where: where });
+      },
+
+      // 跳转到详情页
+      details ({ id }) {
+        this.$router.push({
+          path: '/ledgerAssets/turnoverCar/detail',
+          query: {
+            id
+          }
+        })
+      }
+    },
+    watch: {
+      // 监听类别id变化
+      rootId() {
+        this.reload();
+      }
+    }
+  };
+</script>
+<style lang="scss" scoped>
+   .ele-btn-icon{
+     margin-left: 20px;
+   }
+</style>

+ 123 - 0
src/views/ledgerAssets/turnoverCar/components/turnovercar-search.vue

@@ -0,0 +1,123 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="77px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="编码:" label-width="50px">
+          <el-input clearable v-model="where.code" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="名称:" label-width="50px">
+          <el-input clearable v-model="where.name" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="生命周期:">
+          <DictSelection dictName="生命周期" clearable v-model="where.source">
+          </DictSelection>
+        </el-form-item>
+        <el-form-item label="材质:">
+          <el-input clearable v-model="where.texture" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="型号:">
+          <el-input clearable v-model="where.spaceModule" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="所在部门:">
+           <ele-tree-select
+              clearable
+              :data="treeData"
+              v-model="where.dept"
+              placeholder="请选择"
+              default-expand-all
+              labelKey="name"
+              valueKey="id"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="固定资产编码:" label-width="100px">
+          <el-input clearable v-model="where.fixAssetCode" placeholder="请输入" />
+        </el-form-item>
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+            size="small"
+          >
+            查询
+          </el-button>
+           <el-button @click="reset"
+             icon="el-icon-refresh-left"
+             size="small"
+             type="primary"
+           >重置</el-button>
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+  import { login } from '@/api/login';
+  import {
+    listOrganizations
+  } from '@/api/system/organization';
+  export default {
+    data() {
+      // 默认表单数据
+      const defaultWhere = {
+        name: '',
+        groupId: ''
+      };
+      return {
+        // 表单数据
+        where: { ...defaultWhere },
+        treeData:[]
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    created(){
+       this.query()
+    },
+    methods: {
+      /* 搜索 */
+      search() {
+        console.log(this.where);
+        this.$emit('search', this.where);
+      },
+      /*  重置 */
+      reset() {
+        this.where = { ...this.defaultWhere };
+        this.search();
+      },
+
+      query() {
+        listOrganizations()
+          .then((list) => {
+            this.treeData = this.$util.toTreeData({
+              data: list,
+              idField: 'id',
+              parentIdField: 'parentId'
+            });
+          })
+          .catch((e) => {
+          });
+      },
+
+
+    }
+  };
+</script>

+ 81 - 0
src/views/ledgerAssets/turnoverCar/detail.vue

@@ -0,0 +1,81 @@
+<template>
+  <div>
+    <!-- tab切换 -->
+    <div class="switch">
+      <div class="switch_left">
+        <ul>
+          <li
+            v-for="item in tabOptions"
+            :key="item.key"
+            :class="{ active: activeComp == item.key }"
+            @click="activeComp = item.key"
+          >
+            {{ item.name }}
+          </li>
+        </ul>
+        <el-button size="small" @click="$router.go(-1)">返回</el-button>
+      </div>
+    </div>
+    <div class="content-wrapper">
+      <component :is="activeComp" :queryInfo="queryInfo"></component>
+    </div>
+  </div>
+</template>
+
+<script>
+import baseInfo from './components/baseInfo.vue'
+// import mould from '../components/details/mould.vue'
+// import maintain from '../components/details/maintain.vue'
+// import repair from '../components/details/repair.vue'
+// import malfunction from '../components/details/malfunction.vue'
+// import InternetRecord from '../components/details/InternetRecord.vue'
+// import production from '../components/details/production.vue'
+// import pointInspection from '../components/details/point-inspection.vue'
+export default {
+  components: {
+    baseInfo,
+    // mould,
+    // pointInspection,
+    // maintain,
+    // repair,
+    // production,
+    // InternetRecord,
+    // malfunction
+  },
+  data () {
+    return {
+      activeComp: 'baseInfo',
+      tabOptions: [
+        { key: 'baseInfo', name: '基本信息' },
+        // { key: 'mould', name: '关联模具' },
+        // { key: 'pointInspection', name: '点巡检记录' },
+        // { key: 'maintain', name: '保养记录' },
+        // { key: 'repair', name: '维修记录' },
+        // { key: 'malfunction', name: '故障记录' },
+        // { key: 'production', name: '生产记录' },
+        // { key: 'internet', name: '物联数据' },
+        // { key: 'InternetRecord', name: '物联记录' }
+      ],
+      queryInfo:null
+    }
+  },
+
+  created () {
+     this.queryInfo = JSON.parse(this.$route.query.row)
+  },
+
+}
+</script>
+
+<style lang="scss" scoped>
+.content-wrapper {
+  background-color: #fff;
+}
+.switch_left{
+  width:100%;
+  display:flex;
+  align-items:center;
+  justify-content: space-between;
+  padding-right:20px;
+}
+</style>

+ 310 - 0
src/views/ledgerAssets/turnoverCar/edit.vue

@@ -0,0 +1,310 @@
+<template>
+  <div class="page-container equipment-container">
+    <div class="basic-details-title">
+      <span class="border-span">编辑周转车信息</span>
+      <div>
+        <el-button size="small" @click="$router.go(-1)">取消</el-button>
+        <el-button size="small" type="primary" @click="toSave">确定</el-button>
+      </div>
+    </div>
+    <div label-width="120px">
+      <div class="content">
+        <div class="basic-details-title border-none">
+          <span class="border-span">基本信息</span>
+        </div>
+        <el-descriptions title="" :column="4" size="medium" border>
+          <el-descriptions-item>
+            <template slot="label"> 周转车编码 </template>
+            {{info.assetCode}}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label"> 周转车名称 </template>
+            {{info.assetName}}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label"> 材质 </template>
+            {{info.textureInfo.texture?info.textureInfo.texture:''}}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label"> 型号 </template>
+            {{info.information.modelType}}
+          </el-descriptions-item>
+          <el-descriptions-item :span="2">
+            <template slot="label"> 分类 </template>
+            {{info.information.classificationUrl}}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label"> 采购日期 </template>
+            {{info.warehouseDetail.procurementTime}}
+          </el-descriptions-item>
+          <el-descriptions-item>
+            <template slot="label"> 过保日期 </template>
+            {{info.warehouseDetail.expirationTime}}
+          </el-descriptions-item>
+        </el-descriptions>
+
+        <div class="basic-details-title border-none">
+          <span class="border-span">资产信息</span>
+        </div>
+
+        <el-form label-width="90px">
+          <el-row>
+            <el-col :md="8" :xs="8" :sm="8">
+              <el-form-item label="固资编码" prop="fixAssetCode">
+                <el-input
+                  v-model="info.fixAssetCode"
+                  type="text"
+                  size="small"
+                  placeholder="请输入"
+                ></el-input
+              ></el-form-item>
+            </el-col>
+            <el-col :md="8" :xs="8" :sm="8">
+               <!-- :initStr="info.ownershipDeptCode" -->
+              <el-form-item label="权属部门" prop="name" class="qsbm">
+                <el-input
+                  v-model="info.ownershipDeptCode"
+                  v-show="false"
+                ></el-input>
+                <selectTree
+                  ref="tree2"
+                  class="input"
+                  :value="info.ownershipDeptCode"
+                  :options="deptList"
+                  :props="{
+                    value: 'code',
+                    label: 'name',
+                    children: 'children',
+                  }"
+                  @getValue="qsDeptClick"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div class="basic-details-title border-none">
+          <span class="border-span">文档信息</span>
+        </div>
+        <div class="upload-container">
+          <UploadImg  @getImgs="cbUploadImg" :assetName="`周转车`" ref="UploadImg"/>
+        </div>
+        <div class="basic-details-title border-none">
+          <span class="border-span">扩展信息</span>
+        </div>
+        <el-row>
+           <el-form :model="itemForm" :rules="customRule" ref="formCustom" class="row-form">
+                <el-col :span="8" v-for="(item,index) in itemForm.addList" :key="index">
+                     <el-form-item
+                        :prop="'addList.' + index + '.key'"
+                        :rules="{
+                           required: true, message: '自定义参数名称不能为空', trigger: 'blur'
+                       }"
+                     >
+                       <div  class="add-col">
+                           <el-input class="col-input" v-model="item.key" placeholder="参数名称"></el-input>
+                           <el-input class="col-input" v-model="item.value" placeholder="参数值"></el-input>
+                           <el-button type="text" @click="delt(item,index)"> 删除 </el-button>
+                       </div>
+                     </el-form-item>
+                </el-col>
+                <el-col :span="8" v-if="itemForm.addList.length<10">
+                    <el-form-item label-width="20px">
+                         <el-button type="primary" @click="addItem">增加自定义参数</el-button>
+                    </el-form-item>
+                </el-col>
+           </el-form>
+        </el-row>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+// import selectUpload from '@/components/selectUpload'
+// import UploadImg from '@/components/uploadImg/WithView.vue'
+// import {getAssetInfo,toSaveAsset} from "@/api/ledgerAssets/asset"
+// import { imageView } from "@/utils";
+// import org from "@/api/main/org";
+// import selectTree from "@/components/selectTree";
+export default {
+  // components: { selectUpload, UploadImg , selectTree},
+  data () {
+    return {
+      formData: {},
+      info:{
+        textureInfo:{},
+        information:{},
+        warehouseDetail:{},
+        extendField:[],
+      },
+      customRule:{},
+      itemForm:{
+        addList:[]
+      },
+
+      imageUrl: null,
+      deptList:[]
+
+    }
+  },
+  created(){
+    let id =  this.$route.query.id
+    this.getDetilInfo(id)
+    this.getTreeList()
+  },
+  methods: {
+    // 树形结构数据
+    getTreeList() {
+      org.tree().then((res) => {
+        this.deptList = res.data;
+      });
+    },
+    // 权属部门点击回调
+    qsDeptClick(info) {
+      this.info.ownershipDeptCode = info.code;
+      this.info.ownershipDeptName = info.name
+    },
+    async getDetilInfo(id){
+      const res = await getAssetInfo({id:id})
+      if (res.success){
+         this.info = res.data
+         this.$set(this.info, 'information', res.data.information)
+         this.$set(this.info, 'warehouseDetail', res.data.warehouseDetail)
+         this.$set(this.info, 'textureInfo', JSON.parse(res.data.information.extendField))
+         this.$set(this.info, 'extendField', JSON.parse(res.data.extendField))
+         // this.$set(this.info, 'imgUrl', res.data.imageUrl)
+         this.itemForm.addList = this.info.extendField?this.info.extendField:[]
+         // 设备图片
+         this.imageUrl = res.data.imageUrl;
+         if (this.imageUrl) {
+           imageView(this.imageUrl).then((res) => {
+             this.$refs.UploadImg.setImg(res);
+           });
+         }
+      }
+    },
+
+    // 删除自定义参数
+    delt(item,index){
+        this.itemForm.addList.splice(index,1)
+    },
+    // 添加自定义参数
+    addItem(){
+      if(this.itemForm.addList.length<10){
+        let item = {key:'',value:''}
+         this.itemForm.addList.push(item)
+      }else{
+        this.$message.warning('自定义参数最多添加10条')
+      }
+    },
+
+    // 选择图片回调
+    cbUploadImg(data) {
+      if (data.length > 0) {
+        this.imageUrl = data[0];
+      } else {
+        this.imageUrl = "";
+      }
+    },
+
+    // 点击确定保存
+    toSave(){
+      let extendField = this.itemForm.addList
+      let params = {
+         id:this.info.id,
+         assetCode: this.info.assetCode,
+         imageUrl: this.imageUrl,
+         extendField:JSON.stringify(extendField),
+         fixAssetCode:this.info.fixAssetCode,
+         isIotEnable:false,
+         ownershipDeptCode:this.info.ownershipDeptCode,
+         ownershipDeptName:this.info.ownershipDeptName
+      }
+      this.$refs['formCustom'].validate((valid) => {
+        if (valid) {
+          toSaveAsset(params).then(res=>{
+             if(res.success){
+                 this.$message.success('周转车编辑成功')
+                 this.$router.go(-1)
+             }
+          })
+        } else {
+          return false;
+        }
+      });
+    },
+
+
+    // //使用说明书
+    // operatingManual (info) {
+    //   if (info.length > 0) {
+    //     console.log(info, '------info-----')
+    //     this.formData.operatingManual = info[0]
+    //     console.log(this.formData.operatingManual, 'getImgs')
+    //   } else {
+    //     this.formData.operatingManual = null
+    //     console.log(this.formData.operatingManual, 'getImgs')
+    //   }
+    // },
+    // productionLicence (info) {
+    //   this.formData.productionLicence = info[0]
+    // },
+    // explosionProofCertificate (info) {
+    //   this.formData.explosionProofCertificate = info[0]
+    // },
+    // surveyReport (info) {
+    //   this.formData.surveyReport = info[0]
+    // },
+    // inspectionCycleManual (info) {
+    //   this.formData.inspectionCycleManual = info[0]
+    // },
+    // informationDrawing (info) {
+    //   this.formData.informationDrawing = info[0]
+    // },
+    // productCertificate (info) {
+    //   this.formData.productCertificate = info[0]
+    // }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep.equipment-container {
+  background-color: #fff;
+  padding: 20px;
+  .content {
+    padding: 0 20px;
+  }
+  .label-none {
+    .el-form-item__content {
+      margin-left: 0 !important;
+    }
+  }
+  .upload-container {
+    display: flex;
+    align-items:center;
+    justify-content:center;
+    // .file-list {
+    //   margin-left: 50px;
+    //   flex: 1;
+    // }
+  }
+  .el-form-item__content{
+    display:flex;
+  }
+  .row-form{
+    width:100%;
+    .add-col{
+      display:flex;
+      align-items:center;
+      margin-left: 20px;
+      .col-input{
+        margin-right:5px;
+      }
+    }
+  }
+  .qsbm .el-select{
+    width:100%
+  }
+}
+</style>

+ 75 - 0
src/views/ledgerAssets/turnoverCar/index.vue

@@ -0,0 +1,75 @@
+<template>
+  <div class="ele-body">
+     <el-card shadow="never" v-loading="loading">
+       <ele-split-layout
+         width="266px"
+         allow-collapse
+         :right-style="{ overflow: 'hidden' }"
+       >
+         <div>
+           <div class="ele-border-lighter sys-organization-list">
+             <AssetTree
+               @handleNodeClick="handleNodeClick"
+               :type="'5'"
+               :paramsType="'type'"
+               ref="treeList"
+             />
+           </div>
+         </div>
+         <template v-slot:content>
+           <turnovercar-list
+             v-if="current"
+             :root-id="current.id"
+           />
+         </template>
+       </ele-split-layout>
+     </el-card>
+  </div>
+</template>
+
+<script>
+  import AssetTree from '@/components/AssetTree';
+  import TurnovercarList from './components/turnovercar-list.vue';
+  import {
+    getBoatList
+  } from '@/api/ledgerAssets/boat.js';
+  export default {
+    components: {
+      AssetTree ,
+      TurnovercarList
+    },
+    data () {
+      return {
+        // 加载状态
+        loading: false,
+        // 表格选中数据
+        selection: [],
+        current:null
+      };
+    },
+    computed: {
+
+    },
+    methods: {
+      handleNodeClick (info) {
+        this.current = info
+      },
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .sys-organization-list {
+    height: calc(100vh - 264px);
+    box-sizing: border-box;
+    border-width: 1px;
+    border-style: solid;
+    overflow: auto;
+  }
+  .sys-organization-list :deep(.el-tree-node__content) {
+    height: 40px;
+    & > .el-tree-node__expand-icon {
+      margin-left: 10px;
+    }
+  }
+</style>

+ 4 - 4
vue.config.js

@@ -2,7 +2,7 @@ const CompressionWebpackPlugin = require('compression-webpack-plugin');
 const { transformElementScss } = require('ele-admin/lib/utils/dynamic-theme');
 const path = require('path');
 
-function resolve(dir) {
+function resolve (dir) {
   return path.join(__dirname, dir);
 }
 
@@ -22,10 +22,10 @@ module.exports = {
       '/api': {
         // target: 'http://192.168.3.51:86', // 测试
 
-        target: 'http://192.168.3.35:8080', // kang杨威
+        // target: 'http://192.168.3.35:8080', // kang杨威
         // target: 'http://192.168.3.25:8080', // 黄峥嵘
         // target: 'http://192.168.3.41:8080', // 何江鹏
-        // target: 'http://192.168.3.33:8080', // 谢一平
+        target: 'http://192.168.3.33:8080', // 谢一平
 
         changeOrigin: true, // 只有这个值为true的情况下 才表示开启跨域
         pathRewrite: {
@@ -34,7 +34,7 @@ module.exports = {
       }
     }
   },
-  chainWebpack(config) {
+  chainWebpack (config) {
     config.plugins.delete('prefetch');
     // set svg-sprite-loader
     // config.module.rule('svg').exclude.add(resolve('./src/icons')).end();