Selaa lähdekoodia

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

quwangxin 2 vuotta sitten
vanhempi
commit
21d25b84ce
27 muutettua tiedostoa jossa 1117 lisäystä ja 1036 poistoa
  1. 16 3
      src/api/ledgerAssets/index.js
  2. 2 2
      src/components/upload/fileUpload.vue
  3. 2 1
      src/enum/dict.js
  4. 156 0
      src/views/documentManagement/certificateManagement/components/add-dialog.vue
  5. 20 15
      src/views/documentManagement/certificateManagement/components/certificate-search.vue
  6. 0 117
      src/views/documentManagement/certificateManagement/components/upload-dialog.vue
  7. 6 8
      src/views/documentManagement/certificateManagement/index.vue
  8. 13 9
      src/views/ledgerAssets/boat/components/boat-list.vue
  9. 21 30
      src/views/ledgerAssets/equipment/components/baseInfo.vue
  10. 13 2
      src/views/ledgerAssets/equipment/components/equipment-list.vue
  11. 1 1
      src/views/ledgerAssets/equipment/edit.vue
  12. 3 8
      src/views/ledgerAssets/material/components/baseInfo.vue
  13. 19 3
      src/views/ledgerAssets/material/components/material-list.vue
  14. 18 30
      src/views/ledgerAssets/material/detail.vue
  15. 30 35
      src/views/ledgerAssets/mould/components/baseInfo.vue
  16. 16 2
      src/views/ledgerAssets/mould/components/mould-list.vue
  17. 18 29
      src/views/ledgerAssets/mould/detail.vue
  18. 282 262
      src/views/ledgerAssets/mould/edit.vue
  19. 30 31
      src/views/ledgerAssets/sparepart/components/baseInfo.vue
  20. 16 2
      src/views/ledgerAssets/sparepart/components/sparepart-list.vue
  21. 18 29
      src/views/ledgerAssets/sparepart/detail.vue
  22. 249 253
      src/views/ledgerAssets/sparepart/edit.vue
  23. 8 12
      src/views/ledgerAssets/turnoverCar/components/baseInfo.vue
  24. 8 3
      src/views/ledgerAssets/turnoverCar/components/turnovercar-list.vue
  25. 146 141
      src/views/ledgerAssets/turnoverCar/edit.vue
  26. 3 6
      src/views/technology/route/components/user-search.vue
  27. 3 2
      src/views/workforceManagement/classes/components/edit.vue

+ 16 - 3
src/api/ledgerAssets/index.js

@@ -1,4 +1,5 @@
 import request from '@/utils/request';
+import { download } from '@/utils/file';
 
 // 获取类别实体分页
 export async function getBoatList (data) {
@@ -41,7 +42,7 @@ export async function getAssetList (data) {
 
 // 查询实例详情
 export async function getAssetInfo (id) {
-  const res = await request.get(`/main/asset/login/${id}`);
+  const res = await request.get(`main/asset/getById/${id}`);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -57,7 +58,7 @@ export async function saveOrEdit (data) {
 }
 
 
-// 根据类别统计位置数量 
+// 根据类别统计位置数量
 export async function getCount (data) {
   let par = new URLSearchParams(data);
   const res = await request.get(`/main/asset/countPosition?` + par, {});
@@ -65,4 +66,16 @@ export async function getCount (data) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
-}
+}
+
+// 导出实体
+export async function downloadAsset (params, fileName) {
+  const res = await request.post('/main/asset/page/export',  params, {responseType:'blob'} );
+  download(res.data, fileName)
+}
+
+// 导出类别
+export async function downloadCategory (params, fileName) {
+  const res = await request.post('/main/category/pageSubstance/export',  params, {responseType:'blob'} );
+  download(res.data, fileName)
+}

+ 2 - 2
src/components/upload/fileUpload.vue

@@ -148,7 +148,7 @@
     computed: {
       fileList: {
         set (val) {
-          console.log(val);
+          // console.log(val);
           this.$emit(
             'input',
             val.map((item) => ({
@@ -158,7 +158,7 @@
           );
         },
         get () {
-          console.log(this.value, 2);
+          // console.log(this.value, 2);
           const arr =
             (this.value &&
               this.value.map((item) => ({

+ 2 - 1
src/enum/dict.js

@@ -29,7 +29,8 @@ export default {
   产量目标单位: 'target_unit',
   产能计划状态: 'capacity_status',
   分类层级: 'bom_level',
-  周转车材质: 'turnover_material'
+  周转车材质: 'turnover_material',
+  证件类型: 'id_type'
 };
 
 export const numberList = [

+ 156 - 0
src/views/documentManagement/certificateManagement/components/add-dialog.vue

@@ -0,0 +1,156 @@
+<template>
+  <!-- 上传 -->
+  <el-dialog title="新增" :visible.sync="dialogVisible" width="50%">
+      <el-form ref="form" :model="form" :rules="rules" label-width="82px">
+        <el-row :gutter="15">
+          <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
+            <el-form-item prop="code" label="证照编号">
+              <el-input
+                placeholder="请输入"
+                v-model="form.code"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
+             <el-form-item prop="typeValue" label="证件类型">
+                <DictSelection v-model="form.typeValue" dictName="证件类型"></DictSelection>
+             </el-form-item>
+          </el-col>
+          <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
+            <el-form-item prop="status" label="状态">
+               <DictSelection v-model="form.status" dictName="规则状态"></DictSelection>
+            </el-form-item>
+          </el-col>
+          <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
+             <el-form-item prop="owner" label="持证人">
+               <el-input
+                 placeholder="请输入"
+                 v-model="form.owner"
+               ></el-input>
+             </el-form-item>
+          </el-col>
+          <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
+            <el-form-item prop="salary" label="颁发时间">
+              <el-date-picker
+                style="width:100%"
+                v-model="form.awardTime"
+                type="date"
+                value-format="yyyy-MM-dd"
+                placeholder="选择日期"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
+             <el-form-item prop="date" label="有效期至">
+                <el-date-picker
+                  style="width:100%"
+                  v-model="form.date"
+                  type="daterange"
+                  range-separator="至"
+                  start-placeholder="开始日期"
+                  end-placeholder="结束日期"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  :default-time="['00:00:00', '23:59:59']"
+                >
+                </el-date-picker>
+             </el-form-item>
+          </el-col>
+          <el-col v-bind="styleResponsive ? { sm: 24 } : { span: 24 }">
+             <el-form-item prop="image" label="证照图片">
+               <fileUpload
+                 v-model="form.image"
+                 module="main"
+                 :showLib="true"
+               />
+             </el-form-item>
+          </el-col>
+          <el-col v-bind="styleResponsive ? { sm: 24 } : { span: 24 }">
+            <el-form-item prop="remark" label="备注">
+               <el-input
+                 placeholder="请输入"
+                 v-model="form.remark"
+                 type="textarea"
+                 :rows="3"
+                 :resize="`none`"
+               ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button size="small" @click="submit" type="primary">提 交</el-button>
+      <el-button size="small" @click="dialogVisible = false">关 闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  // import { uploadBatch } from '@/api/system/file/index.js';
+  import fileUpload from '@/components/upload/fileUpload';
+  import imgUpload from '@/components/upload/imgUpload';
+  export default {
+    components: {
+      fileUpload,
+      imgUpload
+    },
+    //注册组件
+    data () {
+      return {
+        dialogVisible: false,
+        rules: {
+          code: [{ required: true, trigger: 'blur', message: '请输入证照编号' }],
+          typeValue: [{ required: true, trigger: 'change' , message: '请选择证件类型'}],
+          date: [{ required: true, trigger: 'change', message: '请选择有效期' }],
+          owner: [{ required: true, trigger: 'blur', message: '请输入持证人' }],
+          status: [{ required: true, trigger: 'change', message: '请选择状态' }],
+          image: [{ required: true, trigger: 'change' , message: '请选择证照图片'}]
+        },
+        form: { },
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    created () {},
+    methods: {
+      open () {
+        this.$refs.form && this.$refs.form.clearValidate();
+        this.form = { };
+        this.dialogVisible = true;
+      },
+      submit(){
+         this.$refs.form.validate((valid) => {
+           if (!valid) {
+             return false;
+           }
+           this.loading = true;
+           const data = {
+             ...this.form,
+             parentId: this.form.parentId || 0
+           };
+           saveOrUpdate(data)
+             .then((msg) => {
+               this.loading = false;
+               this.$message.success(msg);
+               this.updateVisible(false);
+               this.$emit('done');
+             })
+             .catch((e) => {
+               this.loading = false;
+             });
+         });
+
+      }
+    }
+  };
+</script>
+
+<style lang="scss">
+ .el-form-item{
+    margin-bottom:20px!important;
+ }
+</style>

+ 20 - 15
src/views/documentManagement/certificateManagement/components/certificate-search.vue

@@ -7,18 +7,8 @@
     @submit.native.prevent
   >
     <el-row :gutter="10">
-      <el-col v-bind="styleResponsive ? { md: 5 } : { span: 5 }">
+      <el-col v-bind="styleResponsive ? { md:7 } : { span: 7 }">
         <el-form-item label="有效期至">
-          <el-input clearable v-model="where.name" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { md: 5 } : { span: 5 }">
-        <el-form-item label="证件编号">
-          <el-input clearable v-model="where.module" placeholder="请输入" />
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { md: 5 } : { span: 5 }">
-        <el-form-item label="持证人">
           <el-date-picker
             type="daterange"
             class="ele-fluid"
@@ -31,22 +21,37 @@
           </el-date-picker>
         </el-form-item>
       </el-col>
+      <el-col v-bind="styleResponsive ? { md: 6 } : { span: 6 }">
+        <el-form-item label="证件编号">
+          <el-input clearable v-model="where.code" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { md: 6 } : { span: 6}">
+        <el-form-item label="持证人">
+          <el-input clearable v-model="where.name" placeholder="请输入" />
+        </el-form-item>
+      </el-col>
       <el-col v-bind="styleResponsive ? { md: 5 } : { span: 5 }">
         <el-form-item label="证件类型">
-          <el-input clearable v-model="where.module" placeholder="请输入" />
+          <DictSelection
+            dictName="证件类型"
+            clearable
+            v-model="where.type"
+          >
+          </DictSelection>
         </el-form-item>
       </el-col>
-      <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
-        <el-form-item>
+      <el-col v-bind="styleResponsive ? { md: 24 } : { span: 24 }">
+        <el-form-item label-width="0">
           <el-button
             type="primary"
             icon="el-icon-search"
             class="ele-btn-icon"
             @click="search"
+            size="medium"
           >
             查询
           </el-button>
-
           <el-button
             @click="reset"
             icon="el-icon-refresh"

+ 0 - 117
src/views/documentManagement/certificateManagement/components/upload-dialog.vue

@@ -1,117 +0,0 @@
-<template>
-  <!-- 上传 -->
-  <el-dialog title="文件上传" :visible.sync="dialogVisible" width="40%">
-    <el-form label-width="110px" class="zw-criterion">
-      <el-form-item label="选择文件">
-        <el-upload
-          class="avatar-uploader"
-          action="#"
-          :show-file-list="false"
-          :http-request="handlSuccess"
-          :before-upload="beforeUpload"
-        >
-          <el-button icon="el-icon-plus" size="small" type="primary"
-            >文件上传</el-button
-          >
-        </el-upload>
-      </el-form-item>
-      <el-form-item label="模块名">
-        <DictSelection v-model="module" dictName="文件模块"></DictSelection>
-      </el-form-item>
-      <el-form-item label="">
-        <div class="imgs-box">
-          <p v-for="(item, index) in attaments" :key="index" class="imgs-p">
-            <span> {{ item.name }}</span>
-            <el-link @click="delFileList(index)" type="primary">删除</el-link>
-          </p>
-        </div>
-      </el-form-item>
-    </el-form>
-    <div slot="footer" class="dialog-footer">
-      <el-button size="small" @click="dialogVisible = false">关 闭</el-button>
-      <el-button size="small" @click="upload" type="primary">上 传</el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-  import { uploadBatch } from '@/api/system/file/index.js';
-
-  export default {
-    //注册组件
-    data () {
-      return {
-        showViewer: false, // 显示查看器
-        dialogVisible: false,
-        uploadShow: false,
-        attaments: [], //上传文件
-        module: '',
-        file: ''
-      };
-    },
-    created () {},
-    methods: {
-      open () {
-        this.attaments = [];
-        this.module = '';
-        this.dialogVisible = true;
-      },
-      //删除附件
-      delFileList (index) {
-        this.attaments.splice(index, 1);
-      },
-      //上传限制
-      beforeUpload (file) {
-        const isLt10M = file.size / 1024 / 1024 < 10;
-        if (!isLt10M) {
-          this.$message.error('上传文件大小不能超过 10MB!');
-        }
-        return isLt10M;
-      },
-      //图片上传
-      handlSuccess (param) {
-        this.file = param.file;
-        this.attaments.push(param.file);
-      },
-      // 文件上传
-      async upload () {
-        if (this.attaments.length == 0) {
-          return this.$message.warning('文件不能为空!');
-        }
-        if (!this.module) {
-          return this.$message.warning('模块名不能为空!');
-        }
-        await uploadBatch({
-          module: this.module,
-          multiPartFiles: this.attaments
-        });
-        this.$message.success('操作成功!');
-        this.dialogVisible = false;
-        this.$emit('success');
-      }
-    }
-  };
-</script>
-
-<style lang="scss">
-  .zw-table-header {
-    float: right;
-  }
-
-  .imgs-box .imgs-p {
-    height: 30px;
-    background: #f0f3f3;
-    line-height: 30px;
-    width: 372px;
-    margin-bottom: 5px;
-    padding: 0 10px;
-    display: flex;
-    justify-content: space-between;
-  }
-  .zw-criterion-normal {
-    padding: 20px 0 0 0;
-  }
-  .el-main {
-    overflow: hidden;
-  }
-</style>

+ 6 - 8
src/views/documentManagement/certificateManagement/index.vue

@@ -12,10 +12,9 @@
       >
         <!-- 工具栏 -->
         <template v-slot:toolbar>
-          <el-button type="primary" @click="handleUpload">新建</el-button>
-          <el-button type="primary" @click="handleUpload">导入</el-button>
+          <el-button type="primary" icon="el-icon-plus" @click="handleUpload">新建</el-button>
+          <!-- <el-button type="primary" @click="handleUpload">导入</el-button> -->
         </template>
-
         <template v-slot:code="{ row }">
           <el-link>2222</el-link>
           <p class="ele-text-info">身份证</p>
@@ -38,17 +37,16 @@
         </template>
       </ele-pro-table>
     </el-card>
-    <uploadDialog ref="uploadDialogRef" @success="reload" />
+    <addDialog ref="addDialogRef" @success="reload" />
   </div>
 </template>
 
 <script>
   import { getFile, getFileList } from '@/api/system/file/index.js';
-
   import certificateSearch from './components/certificate-search';
-  import uploadDialog from './components/upload-dialog.vue';
+  import addDialog from './components/add-dialog.vue';
   export default {
-    components: { certificateSearch, uploadDialog },
+    components: { certificateSearch, addDialog },
     data () {
       return {
         columns: [
@@ -107,7 +105,7 @@
         this.$refs.table.reload({ where });
       },
       handleUpload () {
-        this.$refs.uploadDialogRef.open();
+        this.$refs.addDialogRef.open();
       },
       handleDownload (row) {
         getFile({ objectName: row.storePath }, row.name);

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

@@ -1,6 +1,9 @@
 <template>
   <div>
-    <boat-search @search="reload">
+    <boat-search 
+      @search="reload"
+      ref="searchRef"
+    >
     </boat-search>
     <!-- 数据表格 -->
     <ele-pro-table
@@ -26,7 +29,7 @@
       </template>
       <!-- 编码列 -->
       <template v-slot:code="{ row }">
-        <el-link @click="details(row)">
+        <el-link @click="details(row)" type="primary" :underline="false">
           {{ row.code }}
         </el-link>
       </template>
@@ -36,7 +39,7 @@
 
 <script>
   import BoatSearch from './boat-search.vue';
-  import { getBoatList } from '@/api/ledgerAssets';
+  import { getBoatList , downloadCategory } from '@/api/ledgerAssets';
   // import { downloadAction } from '@/api/flowable/manage';
   import dictMixins from '@/mixins/dictMixins';
   export default {
@@ -168,12 +171,13 @@
 
       // 导出
       btnExport() {
-        // downloadAction(
-        //   '/flowable/processDefinition/xml',
-        //   'get',
-        //   { processDefinitionId: row.id },
-        //   '舟皿台账'
-        // );
+        let params = {
+          ...this.$refs.searchRef.where,
+          exportType:1,
+          categoryLevelId: this.categoryId,
+          rootCategoryLevelId:this.rootId
+        }
+        downloadCategory(params, '舟皿台账导出数据');
       },
     },
     watch: {

+ 21 - 30
src/views/ledgerAssets/equipment/components/baseInfo.vue

@@ -55,7 +55,7 @@
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 网络状态</template>
-        {{ basicInfo.networkStatus == 1 ? '在线' : '离线' }}
+        {{ basicInfo.networkStatus === 1 ? '在线' : ( basicInfo.networkStatus === 0 ?'离线':'') }}
       </el-descriptions-item>
     </el-descriptions>
 
@@ -87,10 +87,10 @@
     <div class="basic-details-title border-none">
       <span class="border-span">文档信息</span>
     </div>
-    <!-- <div class="upload-container">
+    <div class="upload-container">
       <div class="img-box">
         <img
-          src="~@/assets/img/upload-placeholder.svg"
+          src="~@/assets/upload-placeholder.svg"
           alt=""
           v-if="!imageUrl"
         />
@@ -98,7 +98,7 @@
       </div>
       <div class="file-list">
         <div
-          :class="{ disabled: !item.accessUrl }"
+          :class="{ disabled: !item.storePath }"
           @click="openfile(item)"
           v-for="(item, index) in fileList"
           :key="index"
@@ -107,7 +107,7 @@
           {{ item.t_name }}
         </div>
       </div>
-    </div> -->
+    </div>
     <div class="basic-details-title border-none">
       <span class="border-span">物联参数</span>
     </div>
@@ -165,7 +165,8 @@
 
 <script>
   import { getAssetInfo } from '@/api/ledgerAssets';
-  // import { imageView, fileSystemDownload } from '@/utils'
+  import { getImageUrl } from '@/utils/file.js';
+  import { getFile } from '@/api/system/file/index.js';
   // import DetailsDialog from '@/views/ledgerAssets/components/outstoreDetailsDialog.vue'
   export default {
     props: ['id'],
@@ -233,33 +234,24 @@
           this.basicInfo = data.category;
           if (data.attUrl && data.attUrl.length > 0) {
             // 文档信息
-            // Object.keys(this.attUrl).forEach((n, index) => {
-            //   if (data.attUrl[index].accessUrl) {
-            //     this.attUrl[n] = data.attUrl[index];
-            //   }
-            // });
+            data.attUrl.forEach((item, index) => {
+              Object.assign(this.fileList[item.sort - 1], item)
+            })
           }
-
           // 资产信息
           for (const item of this.prodOpt) {
             // 地址
             if (item.key == 'detailLocation') {
-              item.value = data.positionList[0]?.path
-                ?.map((i) => i.name)
-                .join(',');
+              item.value = data.positionList[0]?.pathName
+                // ?.map((i) => i.name)
+                // .join(',');
             } else {
               item.value = data[item.key] || this.basicInfo[item.key];
             }
           }
-
-          console.log('this.prodOpt', this.prodOpt);
-
           // 设备图片
-          this.imageUrl = data.imageUrl;
-          if (this.imageUrl) {
-            // imageView(this.imageUrl).then((res) => {
-            //   this.$refs.UploadImg.setImg(res);
-            // });
+          if(typeof data.imageUrl !='string' ){
+             this.imageUrl  = getImageUrl(data.imageUrl.storePath)
           }
         });
       },
@@ -272,8 +264,8 @@
         return item.standardCapacity || '';
       },
       openfile (row) {
-        if (row.accessUrl) {
-          fileSystemDownload(row);
+        if (row.storePath) {
+          getFile({ objectName: row.storePath }, row.name);
         }
       },
       // 打开详情弹窗
@@ -288,9 +280,9 @@
       },
       // 设备位置
       initDetailLocation (val) {
-        console.log(val);
+        // console.log(val);
         let list = String(val)
-          .split('/')
+          .split(',')
           .filter((n) => {
             return n !== 'null';
           });
@@ -338,10 +330,9 @@
           height: 57px;
           text-align: center;
           line-height: 55px;
-          border: 1px solid var(--mainColor);
-          color: var(--mainColor);
+          border: 1px solid #1890ff;
+          color: #1890ff;
           cursor: pointer;
-
           &.disabled {
             cursor: not-allowed;
             border-color: rgba(215, 215, 215, 1);

+ 13 - 2
src/views/ledgerAssets/equipment/components/equipment-list.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <equipment-search @search="reload" />
+    <equipment-search @search="reload" ref="search"/>
     <!-- 数据表格 -->
     <ele-pro-table
       ref="table"
@@ -27,6 +27,7 @@
           type="primary"
           icon="el-icon-download"
           class="ele-btn-icon"
+          @click="exportFile"
         >
           导出
         </el-button>
@@ -54,7 +55,7 @@
 
 <script>
   import EquipmentSearch from './equipment-search.vue';
-  import { getAssetList } from '@/api/ledgerAssets';
+  import { getAssetList , downloadAsset } from '@/api/ledgerAssets';
   import dictMixins from '@/mixins/dictMixins';
 
   export default {
@@ -188,6 +189,16 @@
         this.$router.push({
           path: '/ledgerAssets/equipment/edit'
         });
+      },
+
+      exportFile(){
+        let params = {
+          ...this.$refs.search.where,
+          exportType:1,
+          categoryLevelId: this.categoryId,
+          rootCategoryLevelId:this.rootId
+        }
+        downloadAsset(params, '设备台账导出数据');
       }
     },
     watch: {

+ 1 - 1
src/views/ledgerAssets/equipment/edit.vue

@@ -115,7 +115,7 @@
             </el-descriptions-item>
             <el-descriptions-item v-if="pageType == 'edit'">
               <template slot="label"> 网络状态</template>
-              {{ networkStatus == 1 ? '在线' : '离线' }}
+              {{ networkStatus === 1 ? '在线' : ( networkStatus === 0 ?'离线':'') }}
             </el-descriptions-item>
           </el-descriptions>
 

+ 3 - 8
src/views/ledgerAssets/material/components/baseInfo.vue

@@ -181,9 +181,7 @@ export default {
   // components: { QrPrint },
   data () {
     return {
-      information: {
-        extendField: {}
-      },
+      information: {},
       activeName: 'inUse',
       tableData: [],
       pagination: {
@@ -211,10 +209,7 @@ export default {
   methods: {
     getDetilInfo(){
       getDetails(this.rowId).then(res=>{
-         this.information = res
-         if(res.extendField){
-           this.$set(this.information, 'extendField', JSON.parse(res.extendField))
-         }
+         this.information = res.category
       })
     },
 
@@ -375,7 +370,7 @@ export default {
 <style lang="scss" scoped>
 .baseinfo-container {
   background-color: #fff;
-  padding: 20px;
+  padding:0 20px 20px;
   .tabbox {
     width: 100%;
     display: flex;

+ 19 - 3
src/views/ledgerAssets/material/components/material-list.vue

@@ -1,6 +1,9 @@
 <template>
   <div>
-    <material-search @search="reload">
+    <material-search 
+      @search="reload"
+      ref="searchRef"
+    >
     </material-search>
     <!-- 数据表格 -->
     <ele-pro-table
@@ -19,6 +22,7 @@
             type="primary"
             icon="el-icon-download"
             class="ele-btn-icon"
+            @click="btnExport"
           >
             导出
           </el-button>
@@ -36,7 +40,8 @@
 <script>
   import MaterialSearch from './material-search.vue';
   import {
-    getBoatList
+    getBoatList,
+    downloadCategory
   } from '@/api/ledgerAssets';
 
   export default {
@@ -136,7 +141,18 @@
             id
           }
         })
-      }
+      },
+      
+      // 导出
+      btnExport() {
+        let params = {
+          ...this.$refs.searchRef.where,
+          exportType:2,
+          categoryLevelId: this.categoryId,
+          rootCategoryLevelId:this.rootId
+        }
+        downloadCategory(params, '原料台账导出数据');
+      },
     },
     watch: {
       // 监听类别id变化

+ 18 - 30
src/views/ledgerAssets/material/detail.vue

@@ -1,24 +1,17 @@
 <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" :rowId="rowId"></component>
-    </div>
+  <div class="ele-body">
+    <el-card :body-style="{ padding: 0 }">
+       <div class="page-title">
+         <el-page-header @back="$router.go(-1)">
+           <div slot="content" class="pageContent">
+             <div>原料信息详情</div>
+           </div>
+         </el-page-header>
+       </div>
+       <div class="content-wrapper">
+         <component :is="activeComp" :rowId="rowId"></component>
+       </div>
+    </el-card>
   </div>
 </template>
 
@@ -53,14 +46,9 @@ export default {
 </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;
-}
+   .page-title{
+     background: #fff;
+     padding:26px 10px 15px;
+     border-bottom:1px solid #eaeefb;
+   }
 </style>

+ 30 - 35
src/views/ledgerAssets/mould/components/baseInfo.vue

@@ -14,11 +14,11 @@
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 牌号</template>
-        {{ info.category.brandNum }}
+        {{ info.baseInfo.brandNum }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 型号 </template>
-        {{ info.category.modelType }}
+        {{ info.baseInfo.modelType }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 大模体型号 </template>
@@ -50,7 +50,7 @@
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label" :span="2"> 分类 </template>
-        {{info.category.categoryLevelPath}}
+        {{info.baseInfo.categoryLevelPath}}
       </el-descriptions-item>
       <el-descriptions-item >
         <template slot="label"> 采购日期 </template>
@@ -62,7 +62,7 @@
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 计量单位</template>
-        {{info.category.measuringUnit}}
+        {{info.baseInfo.measuringUnit}}
       </el-descriptions-item>
     </el-descriptions>
 
@@ -107,7 +107,7 @@
     <div class="basic-details-title border-none">
       <span class="border-span">文档信息</span>
     </div>
-<!--    <div class="upload-container">
+    <div class="upload-container">
       <div class="img-box">
         <img
           src="~@/assets/upload-placeholder.svg"
@@ -118,7 +118,7 @@
       </div>
       <div class="file-list">
         <div
-          :class="{ disabled: !item.accessUrl }"
+          :class="{ disabled: !item.storePath }"
           @click="openfile(item)"
           v-for="(item, index) in fileList"
           :key="index"
@@ -127,7 +127,7 @@
           {{ item.t_name }}
         </div>
       </div>
-    </div> -->
+    </div>
 
     <div class="basic-details-title border-none">
       <span class="border-span">扩展信息</span>
@@ -150,9 +150,8 @@
 </template>
 
 <script>
-// import {getAssetInfo} from "@/api/ledgerAssets/asset"
-// import DetailsDialog from '@/views/ledgerAssets/components/outstoreDetailsDialog.vue'
-// import { imageView , fileSystemDownload} from "@/utils";
+  import { getImageUrl } from '@/utils/file.js';
+  import { getFile } from '@/api/system/file/index.js';
   import { getAssetInfo } from '@/api/ledgerAssets';
   import { getDetails } from '@/api/classifyManage/itemInformation';
 export default {
@@ -175,12 +174,12 @@ export default {
         { t_name: '产品合格证' }
       ],
       info:{
-        category:{},
+        baseInfo:{},
         extInfoSelf:[],
         extraInfo:{}
       },
       // 设备图片
-      imageUrl: "",
+      imageUrl: '',
       sourceType:null
     }
   },
@@ -189,26 +188,22 @@ export default {
   },
   methods:{
      async getDetilInfo(){
-       const res = await getAssetInfo(this.rowId)
-       if (res){
-          this.info = res
-          this.$set(this.info, 'extraInfo', JSON.parse(res.category.extendField))
-          this.$set(this.info, 'category', res.category)
-          this.$set(this.info, 'extInfoSelf', res.extInfoSelf?res.extInfoSelf:[])
-          this.sourceType = res.positionList[0].type
-          // // 设备图片
-          // if (res.data.imageUrl) {
-          //   imageView(res.data.imageUrl).then((res) => {
-          //     this.imageUrl = res;
-          //   });
-          // }
-          // // 文档信息
-          // if(res.data.attUrl){
-          //   this.fileList.forEach((item, index) => {
-          //     res.data.attUrl[index].t_name = item.t_name;
-          //     this.fileList[index] = res.data.attUrl[index];
-          //   })
-          // }
+       const data = await getAssetInfo(this.rowId)
+       if (data){
+         this.info = data;
+         this.$set(this.info, 'baseInfo', data.category.category)
+         this.$set(this.info, 'extraInfo', data.category.categoryMold)
+          this.sourceType = data.positionList[0].type
+          // 设备图片
+          if(typeof data.imageUrl !='string' ){
+             this.imageUrl  = getImageUrl(data.imageUrl.storePath)
+          }
+          if (data.attUrl && data.attUrl.length > 0) {
+            // 文档信息
+            data.attUrl.forEach((item, index) => {
+              Object.assign(this.fileList[item.sort - 1], item)
+            })
+          }
        }
      },
 
@@ -233,7 +228,7 @@ export default {
 <style lang="scss" scoped>
 .baseinfo-container {
   background-color: #fff;
-  padding: 20px;
+  padding: 0px 20px 20px;
   .content {
     padding: 0 20px;
   }
@@ -268,8 +263,8 @@ export default {
         height: 57px;
         text-align: center;
         line-height: 55px;
-        border: 1px solid var(--mainColor);
-        color: var(--mainColor);
+        border: 1px solid #1890ff;
+        color: #1890ff;
         cursor: pointer;
         &.disabled {
           cursor: not-allowed;

+ 16 - 2
src/views/ledgerAssets/mould/components/mould-list.vue

@@ -1,6 +1,7 @@
 <template>
   <div>
     <mould-search 
+      ref="searchRef"
       @search="reload"
       :isConsumer="isConsumer"
     >
@@ -23,6 +24,7 @@
            type="primary"
            icon="el-icon-download"
            class="ele-btn-icon"
+           @click="btnExport"
          >
            导出
          </el-button>
@@ -70,7 +72,8 @@
 <script>
   import MouldSearch from './mould-search.vue';
   import {
-    getAssetList
+    getAssetList,
+    downloadAsset
   } from '@/api/ledgerAssets';
   import dictMixins from '@/mixins/dictMixins';
   export default {
@@ -208,7 +211,18 @@
             id
           }
         })
-      }
+      },
+      
+      // 导出
+      btnExport() {
+        let params = {
+          ...this.$refs.searchRef.where,
+          exportType:3,
+          categoryLevelId: this.categoryId,
+          rootCategoryLevelId:this.rootId
+        }
+        downloadAsset(params, '模具台账导出数据');
+      },
 
     },
     watch: {

+ 18 - 29
src/views/ledgerAssets/mould/detail.vue

@@ -1,24 +1,18 @@
 <template>
-  <div>
+  <div class="ele-body">
     <!-- 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" :rowId="rowId"></component>
-    </div>
+    <el-card :body-style="{ padding: 0 }">
+       <div class="page-title">
+         <el-page-header @back="$router.go(-1)">
+           <div slot="content" class="pageContent">
+             <div>模具信息详情</div>
+           </div>
+         </el-page-header>
+       </div>
+       <div class="content-wrapper">
+         <component :is="activeComp" :rowId="rowId"></component>
+       </div>
+    </el-card>
   </div>
 </template>
 
@@ -46,14 +40,9 @@ export default {
 </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;
-}
+   .page-title{
+     background: #fff;
+     padding:26px 10px 15px;
+     border-bottom:1px solid #eaeefb;
+   }
 </style>

+ 282 - 262
src/views/ledgerAssets/mould/edit.vue

@@ -1,237 +1,280 @@
 <template>
-  <div class="page-container equipment-container">
-    <div class="page-title basic-details-title">
-      <el-page-header @back="$router.go(-1)">
-        <div slot="content" class="pageContent">
-          <div>编辑模具信息</div>
-        </div>
-      </el-page-header>
-      <div>
-        <el-button size="small" @click="$router.go(-1)">取消</el-button>
-        <el-button
-          size="small"
-          type="primary"
-           @click="toSave"
-          v-loading="btnLoading"
-          >确定</el-button
-        >
-      </div>
-    </div>
-    <div class="content">
-      <el-form label-width="100px">
-        <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.code}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 模具名称 </template>
-            {{info.name}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 牌号 </template>
-            {{info.category.brandNum}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 型号 </template>
-            {{info.category.modelType}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 大模体型号 </template>
-            {{info.extraInfo.dieBodyModel}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 芯杆数量 </template>
-            {{info.extraInfo.mandrelNum}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 模孔数量 </template>
-            {{info.extraInfo.dieHoleNum}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 收缩系数 </template>
-            {{info.extraInfo.shrinkageCoefficient}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 下冲头数量 </template>
-            {{info.extraInfo.lowerPunchNum}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 上冲头数量 </template>
-            {{info.extraInfo.upperPunchNum}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 最大冲压次数 </template>
-            {{info.extraInfo.maximumStampingTimes}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 计量单位 </template>
-            {{info.category.measuringUnit}}
-          </el-descriptions-item>
-          <el-descriptions-item :span="2">
-            <template slot="label"> 分类 </template>
-            {{info.category.categoryLevelPath}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 采购日期 </template>
-            <!-- {{info.category.procurementTime}} -->
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 过保日期 </template>
-            <!-- {{info.category.expirationTime}} -->
-          </el-descriptions-item>
-        </el-descriptions>
+  <div class="ele-body">
+     <el-card :body-style="{ padding: 0 }">
+         <div class="page-container equipment-container">
+           <div class="page-title basic-details-title">
+             <el-page-header @back="$router.go(-1)">
+               <div slot="content" class="pageContent">
+                 <div>编辑模具信息</div>
+               </div>
+             </el-page-header>
+             <div>
+               <el-button size="small" @click="$router.go(-1)">取消</el-button>
+               <el-button
+                 size="small"
+                 type="primary"
+                  @click="toSave"
+                 v-loading="btnLoading"
+                 >确定</el-button
+               >
+             </div>
+           </div>
+           <div class="content">
+             <el-form label-width="100px">
+               <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.code}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 模具名称 </template>
+                   {{info.name}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 牌号 </template>
+                   {{info.baseInfo.brandNum}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 型号 </template>
+                   {{info.baseInfo.modelType}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 大模体型号 </template>
+                   {{info.extraInfo.maxMoldType}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 芯杆数量 </template>
+                   {{info.extraInfo.coreBarNum}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 模孔数量 </template>
+                   {{info.extraInfo.dieHoleNum}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 收缩系数 </template>
+                   {{info.extraInfo.shrinkEffictive}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 下冲头数量 </template>
+                   {{info.extraInfo.downPunchNum}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 上冲头数量 </template>
+                   {{info.extraInfo.upperPunchNum}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 最大冲压次数 </template>
+                   {{info.extraInfo.maxCyTimes}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 计量单位 </template>
+                   {{info.baseInfo.measuringUnit}}
+                 </el-descriptions-item>
+                 <el-descriptions-item :span="2">
+                   <template slot="label"> 分类 </template>
+                   {{info.baseInfo.categoryLevelPath}}
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 采购日期 </template>
+                   <!-- {{info.category.procurementTime}} -->
+                 </el-descriptions-item>
+                 <el-descriptions-item>
+                   <template slot="label"> 过保日期 </template>
+                   <!-- {{info.category.expirationTime}} -->
+                 </el-descriptions-item>
+               </el-descriptions>
 
-        <div class="basic-details-title border-none">
-          <span class="border-span">资产信息</span>
-        </div>
-        <el-row>
-          <el-col :md="8" :xs="8" :sm="8">
-            <el-form-item label="固资编码">
-              <el-input size="small" v-model="info.fixCode"></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :md="8" :xs="8" :sm="8">
-            <el-form-item label="权属部门" prop="ownershipGroupId" class="qsbm">
-               <ele-tree-select
-                   clearable
-                   :data="treeData"
-                   v-model="info.ownershipGroupId"
-                   placeholder="请选择"
-                   default-expand-all
-                   labelKey="name"
-                   valueKey="id"
-               />
-            </el-form-item>
-          </el-col>
-        </el-row>
+               <div class="basic-details-title border-none">
+                 <span class="border-span">资产信息</span>
+               </div>
+               <el-row>
+                 <el-col :md="8" :xs="8" :sm="8">
+                   <el-form-item label="固资编码">
+                     <el-input size="small" v-model="info.fixCode"></el-input>
+                   </el-form-item>
+                 </el-col>
+                 <el-col :md="8" :xs="8" :sm="8">
+                   <el-form-item label="权属部门" prop="ownershipGroupId" class="qsbm">
+                      <ele-tree-select
+                          clearable
+                          :data="treeData"
+                          v-model="info.ownershipGroupId"
+                          placeholder="请选择"
+                          default-expand-all
+                          labelKey="name"
+                          valueKey="id"
+                      />
+                   </el-form-item>
+                 </el-col>
+               </el-row>
 
 
-        <div class="basic-details-title border-none">
-          <span class="border-span">文档信息</span>
-        </div>
-<!--        <div class="upload-container">
-          <UploadImg @getImgs="cbUploadImg" ref="UploadImg" :assetName="`模具`"/>
-          <div class="file-list">
-            <div>
-              <el-form-item prop="image" label="使用说明书">
-                <selectUpload
-                  @getImgs="setImgs('operatingManual', 1, $event)"
-                  :ininObj="attUrl.operatingManual"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="生产许可证书">
-                <selectUpload
-                  @getImgs="setImgs('productionLicence', 2, $event)"
-                  :ininObj="attUrl.productionLicence"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="防爆合格证书">
-                <selectUpload
-                  @getImgs="setImgs('explosionProofCertificate', 3, $event)"
-                  :ininObj="attUrl.explosionProofCertificate"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="检验报告">
-                <selectUpload
-                  @getImgs="setImgs('surveyReport', 4, $event)"
-                  :ininObj="attUrl.surveyReport"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="检验周期说明">
-                <selectUpload
-                  @getImgs="setImgs('inspectionCycleManual', 5, $event)"
-                  :ininObj="attUrl.inspectionCycleManual"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="图纸资料">
-                <selectUpload
-                  @getImgs="setImgs('informationDrawing', 6, $event)"
-                  :ininObj="attUrl.informationDrawing"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="产品合格证">
-                <selectUpload
-                  @getImgs="setImgs('productCertificate', 7, $event)"
-                  :ininObj="attUrl.productCertificate"
-                />
-              </el-form-item>
-            </div>
-          </div>
-        </div> -->
-      </el-form>
-        <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 class="basic-details-title border-none">
+                 <span class="border-span">文档信息</span>
+               </div>
+                 <div class="basic-details-title border-none">
+                   <span class="border-span">文档信息</span>
+                 </div>
+                 <div class="upload-container">
+                   <WithView v-model="imageUrl" :limit="1" :assetName="`模具`"/>
+                   <div class="file-list">
+                     <div>
+                       <el-form-item prop="image" label="使用说明书">
+                         <fileUpload
+                           v-model="attUrl.operatingManual.value"
+                           module="main"
+                           :showLib="true"
+                         />
+                       </el-form-item>
+                     </div>
+                     <div>
+                       <el-form-item prop="image" label="生产许可证书">
+                         <fileUpload
+                           v-model="attUrl.productionLicence.value"
+                           module="main"
+                           :showLib="true"
+                         />
+                       </el-form-item>
+                     </div>
+                     <div>
+                       <el-form-item prop="image" label="防爆合格证书">
+                         <fileUpload
+                           v-model="attUrl.explosionProofCertificate.value"
+                           module="main"
+                           :showLib="true"
+                         />
+                       </el-form-item>
+                     </div>
+                     <div>
+                       <el-form-item prop="image" label="检验报告">
+                         <fileUpload
+                           v-model="attUrl.surveyReport.value"
+                           module="main"
+                           :showLib="true"
+                         />
+                       </el-form-item>
+                     </div>
+                     <div>
+                       <el-form-item prop="image" label="检验周期说明">
+                         <fileUpload
+                           v-model="attUrl.inspectionCycleManual.value"
+                           module="main"
+                           :showLib="true"
+                         />
+                       </el-form-item>
+                     </div>
+                     <div>
+                       <el-form-item prop="image" label="图纸资料">
+                         <fileUpload
+                           v-model="attUrl.informationDrawing.value"
+                           module="main"
+                           :showLib="true"
+                         />
+                       </el-form-item>
+                     </div>
+                     <div>
+                       <el-form-item prop="image" label="产品合格证">
+                         <fileUpload
+                           v-model="attUrl.productCertificate.value"
+                           module="main"
+                           :showLib="true"
+                         />
+                       </el-form-item>
+                     </div>
+                   </div>
+                 </div>
+             </el-form>
+               <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>
+     </el-card>
   </div>
 </template>
 
 <script>
   import { getAssetInfo , saveOrEdit } from '@/api/ledgerAssets';
   import { listOrganizations } from '@/api/system/organization';
+  import fileUpload from '@/components/upload/fileUpload';
+  import WithView from '@/components/upload/WithView';
+  import imgUpload from '@/components/upload/imgUpload';
 export default {
+  components: {
+    WithView,
+    fileUpload,
+    imgUpload,
+  },
   data () {
     return {
       formData: {},
       info:{
-        category:{},
+        baseInfo:{},
         extraInfo:{}
       },
       customRule:{},
       itemForm:{
         addList:[]
       },
-      // 图片
-      imageUrl: null,
-      // 文档信息
-      attUrl: {
-        operatingManual: null,
-        productionLicence: null,
-        explosionProofCertificate: null,
-        surveyReport: null,
-        inspectionCycleManual: null,
-        informationDrawing: null,
-        productCertificate: null,
-      },
+        // 图片
+        imageUrl: null,
+        // 文档信息
+        attUrl: {
+          operatingManual: {
+            value: [],
+            sort: 1
+          },
+          productionLicence: {
+            value: [],
+            sort: 2
+          },
+          explosionProofCertificate: {
+            value: [],
+            sort: 3
+          },
+          surveyReport: {
+            value: [],
+            sort: 4
+          },
+          inspectionCycleManual: {
+            value: [],
+            sort: 5
+          },
+          informationDrawing: {
+            value: [],
+            sort: 6
+          },
+          productCertificate: {
+            value: [],
+            sort: 7
+          }
+        },
       treeData:[],
       btnLoading:false
     }
@@ -277,28 +320,24 @@ export default {
       return attUrl;
     },
     async getDetilInfo(id){
-      const res = await getAssetInfo(id)
-      if (res){
-         this.info = res.data
-         this.$set(this.info, 'category', res.data.category)
-         this.$set(this.info, 'extraInfo', JSON.parse(res.data.category.extendField))
-         // this.$set(this.info, 'imgUrl', res.data.imageUrl)
+      const data = await getAssetInfo(id)
+      if (data){
+         this.info = data
+         this.$set(this.info, 'baseInfo', data.category.category)
+         this.$set(this.info, 'extraInfo', data.category.categoryMold)
          this.itemForm.addList =  this.info.extInfoSelf
           ?  this.info.extInfoSelf
           : [];
+         if (data.attUrl && data.attUrl.length > 0) {
+           // 文档信息
+           Object.keys(this.attUrl).forEach((n, index) => {
+             this.attUrl[n].value =
+               (data.attUrl[index]?.storePath && [data.attUrl[index]]) || [];
+           });
+         }
+
          // 设备图片
-         // this.imageUrl = res.data.imageUrl;
-         // if (this.imageUrl) {
-         //   imageView(this.imageUrl).then((res) => {
-         //     this.$refs.UploadImg.setImg(res);
-         //   });
-         // }
-         // // 文档信息
-         // Object.keys(this.attUrl).forEach((n, index) => {
-         //   if (res.data.attUrl&&res.data.attUrl[index].accessUrl) {
-         //     this.attUrl[n] = res.data.attUrl[index];
-         //   }
-         // });
+         this.imageUrl = data.imageUrl|| {};
       }
     },
 
@@ -332,12 +371,16 @@ export default {
           id: this.info.id,
           code: this.info.code,
           fixCode: this.info.fixCode,
-          // imageUrl: this.imageUrl,
           extInfoSelf: extendField,
           ownershipGroupId: this.info.ownershipGroupId,
           rootCategoryLevelId:this.info.rootCategoryLevelId,
           categoryId:this.info.categoryId,
-          positionIds: JSON.parse(this.info.category.categoryLevelPathId).join(',')
+          // positionIds: JSON.parse(this.info.category.categoryLevelPathId).join(','),
+          position: typeof this.info.positionList == 'string'?{}:this.info.positionList[0],
+          // 文档信息
+          attUrl: this.setWd() || [],
+          // // 设备图片
+          imageUrl: this.imageUrl || {},
         };
         this.btnLoading = true;
         this.$refs['formCustom'].validate((valid) => {
@@ -356,36 +399,13 @@ export default {
           }
         });
       },
-
-    //使用说明书
-    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]
+    // 处理文档信息
+    setWd () {
+      return Object.values(this.attUrl).map((item) => ({
+        ...(item.value[0] || {}),
+        sort: item.sort
+      }));
     },
-    productCertificate (info) {
-      this.formData.productCertificate = info[0]
-    }
   }
 }
 </script>

+ 30 - 31
src/views/ledgerAssets/sparepart/components/baseInfo.vue

@@ -14,15 +14,15 @@
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 型号 </template>
-        {{ info.category.modelType }}
+        {{ info.baseInfo.modelType }}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 规格 </template>
-        {{info.category.specification}}
+        {{info.baseInfo.specification}}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label" :span="2"> 分类 </template>
-        {{info.category.categoryLevelPath}}
+        {{info.baseInfo.categoryLevelPath}}
       </el-descriptions-item>
       <el-descriptions-item >
         <template slot="label"> 采购日期 </template>
@@ -34,11 +34,11 @@
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 计量单位</template>
-        {{info.category.measuringUnit}}
+        {{info.baseInfo.measuringUnit}}
       </el-descriptions-item>
-      <el-descriptions-item v-if="!info.category.unpack">
+      <el-descriptions-item v-if="!info.baseInfo.unpack">
         <template slot="label"> 最小包装单位</template>
-        {{info.category.measuringUnit}}{{info.category.unit}}/{{info.category.packingUnit}}
+        {{info.baseInfo.measuringUnit}}{{info.baseInfo.unit}}/{{info.baseInfo.packingUnit}}
       </el-descriptions-item>
     </el-descriptions>
 
@@ -71,7 +71,7 @@
     <div class="basic-details-title border-none">
       <span class="border-span">文档信息</span>
     </div>
-<!--    <div class="upload-container">
+    <div class="upload-container">
       <div class="img-box">
         <img
           src="~@/assets/upload-placeholder.svg"
@@ -82,7 +82,7 @@
       </div>
       <div class="file-list">
         <div
-          :class="{ disabled: !item.accessUrl }"
+          :class="{ disabled: !item.storePath }"
           @click="openfile(item)"
           v-for="(item, index) in fileList"
           :key="index"
@@ -91,7 +91,7 @@
           {{ item.t_name }}
         </div>
       </div>
-    </div> -->
+    </div>
 
     <div class="basic-details-title border-none">
       <span class="border-span">扩展信息</span>
@@ -112,6 +112,8 @@
 <script>
   import { getAssetInfo } from '@/api/ledgerAssets';
   import { getDetails } from '@/api/classifyManage/itemInformation';
+  import { getImageUrl } from '@/utils/file.js';
+  import { getFile } from '@/api/system/file/index.js';
 export default {
   props: {
     rowId:{
@@ -131,7 +133,7 @@ export default {
         { t_name: '产品合格证' }
       ],
       info:{
-        category:{},
+        baseInfo:{},
         extInfoSelf:[],
       },
       // 设备图片
@@ -147,29 +149,26 @@ export default {
        const res = await getAssetInfo(this.rowId)
        if (res){
           this.info = res
-          this.$set(this.info, 'category', res.category)
-          this.$set(this.info, 'extInfoSelf', res.extInfoSelf?res.extInfoSelf:[]) 
+          this.$set(this.info, 'baseInfo', res.category.category)
+          this.$set(this.info, 'extInfoSelf', res.extInfoSelf?res.extInfoSelf:[])
           // 设备图片
-          // if (res.data.imageUrl) {
-          //   imageView(res.data.imageUrl).then((res) => {
-          //     this.imageUrl = res;
-          //   })
-          // }
-          // // 文档信息
-          // if(res.data.attUrl){
-          //    this.fileList.forEach((item, index) => {
-          //      res.data.attUrl[index].t_name = item.t_name;
-          //      this.fileList[index] = res.data.attUrl[index];
-          //    })
-          // }
+          if(typeof res.imageUrl !='string' ){
+             this.imageUrl  = getImageUrl(res.imageUrl.storePath)
+          }
+          if (res.attUrl && res.attUrl.length > 0) {
+            // 文档信息
+            res.attUrl.forEach((item, index) => {
+              Object.assign(this.fileList[item.sort - 1], item)
+            })
+          }
        }
      },
 
-     openfile(row) {
-       if (row.accessUrl) {
-         fileSystemDownload(row)
+     openfile (row) {
+       if (row.storePath) {
+         getFile({ objectName: row.storePath }, row.name);
        }
-     }
+     },
 
 
 
@@ -181,7 +180,7 @@ export default {
 <style lang="scss" scoped>
 ::v-deep.baseinfo-container {
   background-color: #fff;
-  padding: 20px;
+  padding: 0 20px 20px;
   .content {
     padding: 0 20px;
   }
@@ -216,8 +215,8 @@ export default {
         height: 57px;
         text-align: center;
         line-height: 55px;
-        border: 1px solid var(--mainColor);
-        color: var(--mainColor);
+        border: 1px solid #1890ff;
+        color: #1890ff;
         cursor: pointer;
 
         &.disabled {

+ 16 - 2
src/views/ledgerAssets/sparepart/components/sparepart-list.vue

@@ -3,6 +3,7 @@
     <sparepart-search 
       @search="reload"
       :isConsumer="isConsumer"
+      ref="searchRef"
     >
     </sparepart-search>
     <!-- 数据表格 -->
@@ -23,6 +24,7 @@
            type="primary"
            icon="el-icon-download"
            class="ele-btn-icon"
+           @click="btnExport"
          >
            导出
          </el-button>
@@ -70,7 +72,8 @@
 <script>
   import SparepartSearch from './sparepart-search.vue';
   import {
-    getAssetList
+    getAssetList,
+    downloadAsset
   } from '@/api/ledgerAssets';
   import dictMixins from '@/mixins/dictMixins';
   export default {
@@ -208,7 +211,18 @@
             id
           }
         })
-      }
+      },
+      
+      // 导出
+      btnExport() {
+        let params = {
+          ...this.$refs.searchRef.where,
+          exportType:4,
+          categoryLevelId: this.categoryId,
+          rootCategoryLevelId:this.rootId
+        }
+        downloadAsset(params, '备品备件台账导出数据');
+      },
 
     },
     watch: {

+ 18 - 29
src/views/ledgerAssets/sparepart/detail.vue

@@ -1,24 +1,18 @@
 <template>
-  <div>
+  <div class="ele-body">
     <!-- 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" :rowId="rowId"></component>
-    </div>
+    <el-card :body-style="{ padding: 0 }">
+       <div class="page-title">
+         <el-page-header @back="$router.go(-1)">
+           <div slot="content" class="pageContent">
+             <div>备品备件信息详情</div>
+           </div>
+         </el-page-header>
+       </div>
+       <div class="content-wrapper">
+         <component :is="activeComp" :rowId="rowId"></component>
+       </div>
+    </el-card>
   </div>
 </template>
 
@@ -46,14 +40,9 @@ export default {
 </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;
-}
+   .page-title{
+     background: #fff;
+     padding:26px 10px 15px;
+     border-bottom:1px solid #eaeefb;
+   }
 </style>

+ 249 - 253
src/views/ledgerAssets/sparepart/edit.vue

@@ -1,202 +1,213 @@
 <template>
-  <div class="page-container equipment-container">
-    <div class="page-title basic-details-title">
-      <el-page-header @back="$router.go(-1)">
-        <div slot="content" class="pageContent">
-          <div>编辑模具信息</div>
-        </div>
-      </el-page-header>
-      <div>
-        <el-button size="small" @click="$router.go(-1)">取消</el-button>
-        <el-button
-          size="small"
-          type="primary"
-           @click="toSave"
-          v-loading="btnLoading"
-          >确定</el-button
-        >
-      </div>
-    </div>
-    <div class="content">
-      <el-form label-width="120px">
-        <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.code}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 名称 </template>
-            {{info.name}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 型号 </template>
-            {{info.category.modelType}}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 规格 </template>
-            {{info.category.specification}}
-          </el-descriptions-item>
-          <el-descriptions-item :span="2">
-            <template slot="label"> 分类 </template>
-            {{info.category.categoryLevelPath}}
-          </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.category.measuringUnit}}
-          </el-descriptions-item>
-          <el-descriptions-item v-if="!info.category.unpack">
-            <template slot="label"> 最小包装单位 </template>
-            {{info.category.measuringUnit}}{{info.category.unit}}/{{info.category.packingUnit}}
-          </el-descriptions-item>
-        </el-descriptions>
-
-        <div class="basic-details-title border-none">
-          <span class="border-span">资产信息</span>
-        </div>
-        <el-row>
-          <el-col :md="8" :xs="8" :sm="8">
-            <el-form-item label="固资编码">
-              <el-input size="small" v-model="info.fixCode"></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :md="8" :xs="8" :sm="8">
-             <!-- :initStr="info.ownershipDeptCode" -->
-            <el-form-item label="权属部门" prop="ownershipGroupId" class="qsbm">
-               <ele-tree-select
-                   clearable
-                   :data="treeData"
-                   v-model="info.ownershipGroupId"
-                   placeholder="请选择"
-                   default-expand-all
-                   labelKey="name"
-                   valueKey="id"
-               />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <div class="basic-details-title border-none">
-          <span class="border-span">文档信息</span>
-        </div>
-<!--        <div class="upload-container">
-          <UploadImg @getImgs="cbUploadImg" ref="UploadImg" :assetName="`备品备件`"/>
-          <div class="file-list">
-            <div>
-              <el-form-item prop="image" label="使用说明书">
-                <selectUpload
-                  @getImgs="setImgs('operatingManual', 1, $event)"
-                  :ininObj="attUrl.operatingManual"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="生产许可证书">
-                <selectUpload
-                  @getImgs="setImgs('productionLicence', 2, $event)"
-                  :ininObj="attUrl.productionLicence"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="防爆合格证书">
-                <selectUpload
-                  @getImgs="setImgs('explosionProofCertificate', 3, $event)"
-                  :ininObj="attUrl.explosionProofCertificate"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="检验报告">
-                <selectUpload
-                  @getImgs="setImgs('surveyReport', 4, $event)"
-                  :ininObj="attUrl.surveyReport"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="检验周期说明">
-                <selectUpload
-                  @getImgs="setImgs('inspectionCycleManual', 5, $event)"
-                  :ininObj="attUrl.inspectionCycleManual"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="图纸资料">
-                <selectUpload
-                  @getImgs="setImgs('informationDrawing', 6, $event)"
-                  :ininObj="attUrl.informationDrawing"
-                />
-              </el-form-item>
-            </div>
-            <div>
-              <el-form-item prop="image" label="产品合格证">
-                <selectUpload
-                  @getImgs="setImgs('productCertificate', 7, $event)"
-                  :ininObj="attUrl.productCertificate"
-                />
-              </el-form-item>
+  <div class="ele-body">
+    <el-card shadow="never">
+        <div class="page-container equipment-container">
+            <div class="page-title basic-details-title">
+              <el-page-header @back="$router.go(-1)">
+                <div slot="content" class="pageContent">
+                  <div>编辑备品备件信息</div>
+                </div>
+              </el-page-header>
+              <div>
+                <el-button size="small" @click="$router.go(-1)">取消</el-button>
+                <el-button
+                  size="small"
+                  type="primary"
+                   @click="toSave"
+                  v-loading="btnLoading"
+                  >确定</el-button
+                >
+              </div>
             </div>
-          </div>
-        </div> -->
+            <div class="content">
+              <el-form label-width="120px">
+                <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.code}}
+                  </el-descriptions-item>
+                  <el-descriptions-item>
+                    <template slot="label"> 名称 </template>
+                    {{info.name}}
+                  </el-descriptions-item>
+                  <el-descriptions-item>
+                    <template slot="label"> 型号 </template>
+                    {{info.baseInfo.modelType}}
+                  </el-descriptions-item>
+                  <el-descriptions-item>
+                    <template slot="label"> 规格 </template>
+                    {{info.baseInfo.specification}}
+                  </el-descriptions-item>
+                  <el-descriptions-item :span="2">
+                    <template slot="label"> 分类 </template>
+                    {{info.baseInfo.categoryLevelPath}}
+                  </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.baseInfo.measuringUnit}}
+                  </el-descriptions-item>
+                  <el-descriptions-item v-if="!info.baseInfo.unpack">
+                    <template slot="label"> 最小包装单位 </template>
+                    {{info.baseInfo.measuringUnit}}{{info.baseInfo.unit}}/{{info.baseInfo.packingUnit}}
+                  </el-descriptions-item>
+                </el-descriptions>
 
-       </el-form>
-        <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>
+                <div class="basic-details-title border-none">
+                  <span class="border-span">资产信息</span>
+                </div>
+                <el-row>
+                  <el-col :md="8" :xs="8" :sm="8">
+                    <el-form-item label="固资编码">
+                      <el-input size="small" v-model="info.fixCode"></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :md="8" :xs="8" :sm="8">
+                     <!-- :initStr="info.ownershipDeptCode" -->
+                    <el-form-item label="权属部门" prop="ownershipGroupId" class="qsbm">
+                       <ele-tree-select
+                           clearable
+                           :data="treeData"
+                           v-model="info.ownershipGroupId"
+                           placeholder="请选择"
+                           default-expand-all
+                           labelKey="name"
+                           valueKey="id"
+                       />
                     </el-form-item>
-                </el-col>
-           </el-form>
-        </el-row>
-      </div>
+                  </el-col>
+                </el-row>
+                <div class="basic-details-title border-none">
+                  <span class="border-span">文档信息</span>
+                </div>
+                <div class="upload-container">
+                  <WithView v-model="imageUrl" :limit="1" :assetName="'备品备件'"/>
+                  <div class="file-list">
+                    <div>
+                      <el-form-item prop="image" label="使用说明书">
+                        <fileUpload
+                          v-model="attUrl.operatingManual.value"
+                          module="main"
+                          :showLib="true"
+                        />
+                      </el-form-item>
+                    </div>
+                    <div>
+                      <el-form-item prop="image" label="生产许可证书">
+                        <fileUpload
+                          v-model="attUrl.productionLicence.value"
+                          module="main"
+                          :showLib="true"
+                        />
+                      </el-form-item>
+                    </div>
+                    <div>
+                      <el-form-item prop="image" label="防爆合格证书">
+                        <fileUpload
+                          v-model="attUrl.explosionProofCertificate.value"
+                          module="main"
+                          :showLib="true"
+                        />
+                      </el-form-item>
+                    </div>
+                    <div>
+                      <el-form-item prop="image" label="检验报告">
+                        <fileUpload
+                          v-model="attUrl.surveyReport.value"
+                          module="main"
+                          :showLib="true"
+                        />
+                      </el-form-item>
+                    </div>
+                    <div>
+                      <el-form-item prop="image" label="检验周期说明">
+                        <fileUpload
+                          v-model="attUrl.inspectionCycleManual.value"
+                          module="main"
+                          :showLib="true"
+                        />
+                      </el-form-item>
+                    </div>
+                    <div>
+                      <el-form-item prop="image" label="图纸资料">
+                        <fileUpload
+                          v-model="attUrl.informationDrawing.value"
+                          module="main"
+                          :showLib="true"
+                        />
+                      </el-form-item>
+                    </div>
+                    <div>
+                      <el-form-item prop="image" label="产品合格证">
+                        <fileUpload
+                          v-model="attUrl.productCertificate.value"
+                          module="main"
+                          :showLib="true"
+                        />
+                      </el-form-item>
+                    </div>
+                  </div>
+                </div>
+               </el-form>
+                <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>
+    </el-card>
   </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";
+  import fileUpload from '@/components/upload/fileUpload';
+  import WithView from '@/components/upload/WithView';
+  import imgUpload from '@/components/upload/imgUpload';
   import { getAssetInfo , saveOrEdit } from '@/api/ledgerAssets';
   import { listOrganizations } from '@/api/system/organization';
 export default {
-  // components: { selectUpload, UploadImg , selectTree},
+  components: {
+    WithView,
+    fileUpload,
+    imgUpload,
+  },
   data () {
     return {
       formData: {},
       info:{
-        category:{},
+        baseInfo:{},
         extraInfo:{}
       },
       customRule:{},
@@ -207,13 +218,34 @@ export default {
       imageUrl: null,
       // 文档信息
       attUrl: {
-        operatingManual: null,
-        productionLicence: null,
-        explosionProofCertificate: null,
-        surveyReport: null,
-        inspectionCycleManual: null,
-        informationDrawing: null,
-        productCertificate: null,
+        operatingManual: {
+          value: [],
+          sort: 1
+        },
+        productionLicence: {
+          value: [],
+          sort: 2
+        },
+        explosionProofCertificate: {
+          value: [],
+          sort: 3
+        },
+        surveyReport: {
+          value: [],
+          sort: 4
+        },
+        inspectionCycleManual: {
+          value: [],
+          sort: 5
+        },
+        informationDrawing: {
+          value: [],
+          sort: 6
+        },
+        productCertificate: {
+          value: [],
+          sort: 7
+        }
       },
       treeData:[],
       btnLoading:false,
@@ -269,27 +301,24 @@ export default {
     },
 
     async getDetilInfo(id){
-      const res = await getAssetInfo(id)
-      if (res){
-         this.info = res.data
-         this.$set(this.info, 'category', res.data.category)
-         this.$set(this.info, 'extraInfo', JSON.parse(res.data.category.extendField))
+      const data = await getAssetInfo(id)
+      if (data){
+         this.info = data
+         this.$set(this.info, 'baseInfo', data.category.category)
+         this.$set(this.info, 'extraInfo', data.category.extendField)
          this.itemForm.addList =  this.info.extInfoSelf
           ?  this.info.extInfoSelf
           : [];
-         // 设备图片
-         // this.imageUrl = res.data.imageUrl;
-         // if (this.imageUrl) {
-         //   imageView(this.imageUrl).then((res) => {
-         //     this.$refs.UploadImg.setImg(res);
-         //   });
-         // }
-         // // 文档信息
-         // Object.keys(this.attUrl).forEach((n, index) => {
-         //   if (res.data.attUrl&&res.data.attUrl[index].accessUrl) {
-         //     this.attUrl[n] = res.data.attUrl[index];
-         //   }
-         // });
+        if (data.attUrl && data.attUrl.length > 0) {
+          // 文档信息
+          Object.keys(this.attUrl).forEach((n, index) => {
+            this.attUrl[n].value =
+              (data.attUrl[index]?.storePath && [data.attUrl[index]]) || [];
+          });
+        }
+
+        // 设备图片
+        this.imageUrl = data.imageUrl||{};
       }
     },
 
@@ -307,18 +336,13 @@ export default {
       }
     },
 
-    // 获取上传图片信息
-    getImgs(info){
-       if(info.length){
-         this.info.imgUrl = info[0]
-         // this.info.showUrl = window.URL.createObjectURL(new Blob([param.file]))
-       }else{
-         this.info.imgUrl = {}
-       }
+    // 处理文档信息
+    setWd () {
+      return Object.values(this.attUrl).map((item) => ({
+        ...(item.value[0] || {}),
+        sort: item.sort
+      }));
     },
-
-    // 点击确定保存
-
       // 点击确定保存
       toSave () {
         let extendField = this.itemForm.addList;
@@ -326,12 +350,15 @@ export default {
           id: this.info.id,
           code: this.info.code,
           fixCode: this.info.fixCode,
-          // imageUrl: this.imageUrl,
+          imageUrl: this.imageUrl || {},
           extInfoSelf: extendField,
           ownershipGroupId: this.info.ownershipGroupId,
           rootCategoryLevelId:this.info.rootCategoryLevelId,
           categoryId:this.info.categoryId,
-          positionIds: JSON.parse(this.info.category.categoryLevelPathId).join(',')
+          position: typeof this.info.positionList == 'string'?{}:this.info.positionList[0],
+          // 文档信息
+          attUrl: this.setWd() || []
+          // positionIds: JSON.parse(this.info.category.categoryLevelPathId).join(',')
         };
         this.btnLoading = true;
         this.$refs['formCustom'].validate((valid) => {
@@ -349,37 +376,7 @@ export default {
             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>
@@ -387,7 +384,6 @@ export default {
 <style lang="scss" scoped>
 .equipment-container {
   background-color: #fff;
-  padding: 20px;
   .content {
     padding: 0 20px;
   }

+ 8 - 12
src/views/ledgerAssets/turnoverCar/components/baseInfo.vue

@@ -14,7 +14,7 @@
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 材质</template>
-        {{ info.category.extendField && JSON.parse(info.category.extendField).texture }}
+        {{getDictValue('周转车材质',  info.category.materialQuality)}}
       </el-descriptions-item>
       <el-descriptions-item>
         <template slot="label"> 型号 </template>
@@ -123,13 +123,9 @@
 <script>
 // import {getAssetInfo} from "@/api/ledgerAssets/asset"
 // import DetailsDialog from '@/views/ledgerAssets/components/outstoreDetailsDialog.vue'
-import { imageView } from "@/utils"
-  import {
-    getAssetInfo
-  } from '@/api/ledgerAssets';
-  import {
-    getDetails
-  } from '@/api/classifyManage/itemInformation';
+  import { getImageUrl } from '@/utils/file.js';
+  import { getAssetInfo } from '@/api/ledgerAssets';
+  import { getDetails } from '@/api/classifyManage/itemInformation';
   import dictMixins from '@/mixins/dictMixins';
 export default {
   mixins: [dictMixins],
@@ -154,6 +150,7 @@ export default {
   created () {
      this.getDetilInfo()
      this.requestDict('生命周期');
+     this.requestDict('周转车材质');
   },
   methods:{
      async getDetilInfo(){
@@ -164,10 +161,9 @@ export default {
           this.$set(this.info, 'category', res.category)
           this.$set(this.info, 'extInfoSelf', res.extInfoSelf?res.extInfoSelf:[])
           // this.$set(this.info, 'warehouseDetail', res.data.warehouseDetail)
-          if (res.imageUrl) {
-            imageView(res.imageUrl).then((res) => {
-              this.imageUrl = res;
-            });
+          // 设备图片
+          if(typeof res.imageUrl !='string' ){
+             this.imageUrl  = getImageUrl(res.imageUrl.storePath)
           }
        }
      },

+ 8 - 3
src/views/ledgerAssets/turnoverCar/components/turnovercar-list.vue

@@ -59,7 +59,7 @@
 
 <script>
   import TurnovercarSearch from './turnovercar-search.vue';
-  import {   getAssetList   } from '@/api/ledgerAssets';
+  import {   getAssetList  , downloadAsset } from '@/api/ledgerAssets';
   import dictMixins from '@/mixins/dictMixins';
   // import { downloadAction } from '@/api/flowable/manage';
 
@@ -208,8 +208,13 @@
 
       // 导出
       btnExport() {
-        const obj = this.$refs.searchRef.getForm()
-
+        let params = {
+          ...this.$refs.searchRef.where,
+          exportType:2,
+          categoryLevelId: this.categoryId,
+          rootCategoryLevelId:this.rootId
+        }
+        downloadAsset(params, '周转车台账导出数据');
       },
 
     },

+ 146 - 141
src/views/ledgerAssets/turnoverCar/edit.vue

@@ -1,147 +1,151 @@
 <template>
-  <div class="page-container equipment-container">
-    <div class="page-title basic-details-title">
-      <el-page-header @back="$router.go(-1)">
-        <div slot="content" class="pageContent">
-          <div>编辑周转车信息</div>
-        </div>
-      </el-page-header>
-      <div>
-        <el-button size="small" @click="$router.go(-1)">取消</el-button>
-        <el-button
-          size="small"
-          type="primary"
-           @click="toSave"
-          v-loading="btnLoading"
-          >确定</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.code }}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 名称 </template>
-            {{ info.name }}
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 材质 </template>
-            {{getDictValue('周转车材质',  info.category.materialQuality)}}
-            <!-- {{ info.category.extendField && JSON.parse(info.category.extendField).texture }} -->
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template slot="label"> 型号 </template>
-            {{ info.category.modelType }}
-          </el-descriptions-item>
-          <el-descriptions-item :span="2">
-            <template slot="label"> 分类 </template>
-            {{ info.category.categoryLevelPath }}
-          </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="ele-body">
+     <el-card :body-style="{ padding: 0 }">
+        <div class="page-container equipment-container">
+          <div class="page-title basic-details-title">
+            <el-page-header @back="$router.go(-1)">
+              <div slot="content" class="pageContent">
+                <div>编辑周转车信息</div>
+              </div>
+            </el-page-header>
+            <div>
+              <el-button size="small" @click="$router.go(-1)">取消</el-button>
+              <el-button
+                size="small"
+                type="primary"
+                 @click="toSave"
+                v-loading="btnLoading"
+                >确定</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.code }}
+                </el-descriptions-item>
+                <el-descriptions-item>
+                  <template slot="label"> 名称 </template>
+                  {{ info.name }}
+                </el-descriptions-item>
+                <el-descriptions-item>
+                  <template slot="label"> 材质 </template>
+                  {{getDictValue('周转车材质',  info.category.materialQuality)}}
+                  <!-- {{ info.category.extendField && JSON.parse(info.category.extendField).texture }} -->
+                </el-descriptions-item>
+                <el-descriptions-item>
+                  <template slot="label"> 型号 </template>
+                  {{ info.category.modelType }}
+                </el-descriptions-item>
+                <el-descriptions-item :span="2">
+                  <template slot="label"> 分类 </template>
+                  {{ info.category.categoryLevelPath }}
+                </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>
+              <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="fixCode">
-                <el-input
-                  v-model="info.fixCode"
-                  type="text"
-                  size="small"
-                  placeholder="请输入"
-                ></el-input
-              ></el-form-item>
-            </el-col>
-            <el-col :md="8" :xs="8" :sm="8">
-              <el-form-item label="权属部门" prop="name" class="qsbm">
-                <ele-tree-select
-                    clearable
-                    :data="treeData"
-                    v-model="info.ownershipGroupId"
-                    placeholder="请选择"
-                    default-expand-all
-                    labelKey="name"
-                    valueKey="id"
-                />
-              </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">
-          <WithView v-model="imageUrl" :limit="1" :assetName="'周转车'"/>
-        </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 label-width="90px">
+                <el-row>
+                  <el-col :md="8" :xs="8" :sm="8">
+                    <el-form-item label="固资编码" prop="fixCode">
+                      <el-input
+                        v-model="info.fixCode"
+                        type="text"
+                        size="small"
+                        placeholder="请输入"
+                      ></el-input
+                    ></el-form-item>
+                  </el-col>
+                  <el-col :md="8" :xs="8" :sm="8">
+                    <el-form-item label="权属部门" prop="name" class="qsbm">
+                      <ele-tree-select
+                          clearable
+                          :data="treeData"
+                          v-model="info.ownershipGroupId"
+                          placeholder="请选择"
+                          default-expand-all
+                          labelKey="name"
+                          valueKey="id"
+                      />
+                    </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">
+                <WithView v-model="imageUrl" :limit="1" :assetName="'周转车'"/>
+              </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-form-item>
-            </el-col>
-          </el-form>
-        </el-row>
-      </div>
-    </div>
+                  <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>
+     </el-card>
   </div>
 </template>
 
@@ -240,7 +244,8 @@
           ownershipGroupId: this.info.ownershipGroupId,
           rootCategoryLevelId:this.info.rootCategoryLevelId,
           categoryId:this.info.categoryId,
-          positionIds: typeof this.info.category.categoryLevelPathId == 'string'? this.info.category.categoryLevelPathId : JSON.parse(this.info.category.categoryLevelPathId).join(',')
+          position: typeof this.info.positionList == 'string'?{}:this.info.positionList[0]
+          // positionIds: typeof this.info.category.categoryLevelPathId == 'string'? this.info.category.categoryLevelPathId : JSON.parse(this.info.category.categoryLevelPathId).join(',')
         };
         this.btnLoading = true;
         this.$refs['formCustom'].validate((valid) => {

+ 3 - 6
src/views/technology/route/components/user-search.vue

@@ -42,7 +42,7 @@
       </el-col>
 
       <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
-        <div class="ele-form-actions">
+        <el-form-item label-width="20px">
           <el-button
             type="primary"
             icon="el-icon-search"
@@ -52,7 +52,7 @@
             查询
           </el-button>
           <el-button @click="reset">重置</el-button>
-        </div>
+        </el-form-item>
       </el-col>
     </el-row>
   </el-form>
@@ -65,10 +65,7 @@
       const defaultWhere = {
         code: '',
         name: '',
-        version: '1.0',
         status: ''
-        // nickname: '',
-        // sex: undefined
       };
       return {
         // 表单数据
@@ -93,7 +90,7 @@
       },
       /*  重置 */
       reset() {
-        this.where = { ...this.defaultWhere };
+        this.where = { ...this.defaultWhere }
         this.search();
       }
     }

+ 3 - 2
src/views/workforceManagement/classes/components/edit.vue

@@ -155,8 +155,9 @@
             delete this.form.id;
           }
           this.$refs.timeTable.verification().then((res) => {
-            this.loading = true;
             this.form.details = this.$refs.timeTable.form.datasource;
+            if(!this.form.details.length) return this.$message.warning('工作时间段不能为空');
+            this.loading = true;
             let fn;
             switch (this.type) {
               case 'add':
@@ -178,7 +179,7 @@
               })
               .catch((e) => {
                 this.loading = false;
-                this.$message.error(e.message);
+                // this.$message.error(e.message);
               });
           });
         });