From 8f24fea6ef79a68bbda4991bd9bd7a60402ad033 Mon Sep 17 00:00:00 2001
From: haoyahui <2032914783@qq.com>
Date: 星期四, 09 十一月 2023 18:16:03 +0800
Subject: [PATCH] 采购单,物品分类

---
 admin-web/src/views/foundation/classification/edit.vue     |  174 ++--
 admin-web/src/api/stock/procure/purchaseOrder.js           |   81 ++
 admin-web/src/views/stock/procure/purchaseOrder/edit.vue   |  511 +++++++++++++++
 admin-web/src/api/baseSetting/finsystenant.js              |    4 
 admin-web/src/views/stock/procure/purchaseOrder/index.vue  |  691 ++++++++++-----------
 admin-web/src/views/foundation/classification/index.vue    |  244 ++++---
 admin-web/src/views/stock/procure/purchaseOrder/detail.vue |  147 ++++
 admin-web/src/api/foudation/classification.js              |   13 
 admin-web/src/views/foundation/classification/items.js     |   15 
 admin-web/src/views/systemManger/server/user/edit.vue      |    1 
 10 files changed, 1,317 insertions(+), 564 deletions(-)

diff --git a/admin-web/src/api/baseSetting/finsystenant.js b/admin-web/src/api/baseSetting/finsystenant.js
index 264985e..6c943c6 100644
--- a/admin-web/src/api/baseSetting/finsystenant.js
+++ b/admin-web/src/api/baseSetting/finsystenant.js
@@ -9,9 +9,7 @@
 export function getTree(parameter) {
   return request.get(SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/tree_fin_tenant', {params: parameter})
 }
-// export function getTree(parameter) {
-//   return request.get(SettingIplatform.apiBaseURL + '/pc/base/category/select/tree', {params: parameter})
-// }
+
 
 /**
  * @Description 鏍规嵁棣栧瓧姣嶆煡璇㈠尯鍒掑垪琛�
diff --git a/admin-web/src/api/foudation/classification.js b/admin-web/src/api/foudation/classification.js
new file mode 100644
index 0000000..b2465c1
--- /dev/null
+++ b/admin-web/src/api/foudation/classification.js
@@ -0,0 +1,13 @@
+import request from '@/utils/request'
+import SettingIplatform from '@/utils/settingIplatform';
+
+export function getTree(parameter) {
+  return request.get(SettingIplatform.apiBaseURL + '/pc/base/category/select/tree', {params: parameter})
+}
+export function getCategoryDetail(params) {
+  return request({
+    url: '/pc/base/category/detail',
+    method: 'get',
+    params
+  })
+}
\ No newline at end of file
diff --git a/admin-web/src/api/stock/procure/purchaseOrder.js b/admin-web/src/api/stock/procure/purchaseOrder.js
new file mode 100644
index 0000000..7199f73
--- /dev/null
+++ b/admin-web/src/api/stock/procure/purchaseOrder.js
@@ -0,0 +1,81 @@
+import request from '@/utils/request';
+
+// 浠撳簱閫夋嫨鍒楄〃
+export function selectTenantWarehouse(params) {
+  return request({
+    url: '/pc/base/warehouse/select/tenant_warehouse',
+    method: 'get',
+    params,
+  });
+}
+
+// 鐗╁搧鍒嗙被鍒楄〃
+export function getCategoryDetail(params) {
+  return request({
+    url: '/pc/base/category/detail',
+    method: 'get',
+    params,
+  });
+}
+
+// 鐗╁搧鍒楄〃
+export function goodsTemplate(params) {
+  return request({
+    url: '/pc/base/goods/template/query/goodsTemplate',
+    method: 'get',
+    params,
+  });
+}
+// 瑙勬牸鍨嬪彿
+export function goodsModel(params) {
+  return request({
+    url: '/pc/base/goods/models/query/goodsModel',
+    method: 'get',
+    params,
+  });
+}
+
+// 閲囪喘鍗�
+export function procureAdd(data) {
+  return request({
+    url: '/pc/whForm/procure/add',
+    method: 'post',
+    data,
+  });
+}
+export function procureEdit(data) {
+  return request({
+    url: '/pc/whForm/procure/edit',
+    method: 'post',
+    data,
+  });
+}
+export function procureList(params) {
+  return request({
+    url: '/pc/whForm/procure/list',
+    method: 'get',
+    params,
+  });
+}
+export function procureDetail(params) {
+  return request({
+    url: '/pc/whForm/procure/detail',
+    method: 'get',
+    params,
+  });
+}
+export function procureDel(data) {
+  return request({
+    url: '/pc/whForm/procure/del',
+    method: 'delete',
+    data,
+  });
+}
+// 鍏ュ簱
+export function procureIncome(data) {
+  return request({
+    url: '/pc/whForm/procure/income',
+    method: 'post',
+    data,
+  });
+}
\ No newline at end of file
diff --git a/admin-web/src/views/foundation/classification/edit.vue b/admin-web/src/views/foundation/classification/edit.vue
index f0f9077..808e3f7 100644
--- a/admin-web/src/views/foundation/classification/edit.vue
+++ b/admin-web/src/views/foundation/classification/edit.vue
@@ -1,25 +1,34 @@
 <template>
   <win-sm :title="setting.title" @close="close" :width="'800px'">
     <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
-      <el-form-item label="涓婄骇鍒嗙被" prop="fatherCategoryId">
-        <el-input v-model="formData.fatherCategoryId" clearable maxlength="20" show-word-limit style="width: 100%"/>
+      <el-form-item label="涓婄骇鍒嗙被" prop="fatherCategoryName" :key="key">
+        <el-input
+          v-model="formData.fatherCategoryName"
+          clearable
+          maxlength="20"
+          show-word-limit
+          style="width: 100%"
+          disabled
+        />
       </el-form-item>
       <el-form-item label="鍒嗙被鍚嶇О" prop="categoryName">
-        <el-input v-model="formData.categoryName" clearable maxlength="20" show-word-limit style="width: 100%"/>
+        <el-input v-model="formData.categoryName" clearable maxlength="20" show-word-limit style="width: 100%" />
       </el-form-item>
-      <el-form-item label="绫诲埆" prop="classification">
-        <!-- <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> -->
+      <!-- 鍙湁绗笁绾у垎绫讳俊鎭淮鎶ゆ椂闇�瑕侀�夌被鍒� -->
+      <el-form-item label="绫诲埆" prop="classification" v-if="plevels==2">
         <el-select v-model="formData.classification" placeholder="" clearable style="width: 100%">
-          <el-option
-            v-for="item in options"
-            :key="item.code"
-            :label="item.label"
-            :value="item.code">
-          </el-option>
+          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="椤哄簭" prop="orderNumber">
-        <el-input v-model="formData.orderNumber" clearable maxlength="20" show-word-limit style="width: 100%"/>
+        <el-input
+          type="number"
+          v-model="formData.orderNumber"
+          clearable
+          maxlength="20"
+          show-word-limit
+          style="width: 100%"
+        />
       </el-form-item>
       <el-form-item label="鐘舵��" prop="states">
         <el-radio-group v-model="formData.states">
@@ -29,105 +38,108 @@
       </el-form-item>
     </el-form>
     <div slot="footer" align="center" class="dialog-footer">
-      <my-button name="鍙栨秷" site="form" @click="close"/>
-      <my-button name="淇濆瓨" site="form" @click="save"/>
+      <my-button name="鍙栨秷" site="form" @click="close" />
+      <my-button name="淇濆瓨" site="form" @click="save" />
     </div>
   </win-sm>
 </template>
 
 <script>
-import winSm from '@/components/win/win-sm'
-import myButton from '@/components/myButton/myButton'
-import * as finsystenant from '@/api/baseSetting/finsystenant'
-
+import winSm from '@/components/win/win-sm';
+import myButton from '@/components/myButton/myButton';
+import * as finsystenant from '@/api/baseSetting/finsystenant';
+import { getDicts } from '@/api/system/dict/data';
+import { getCategoryDetail } from '@/api/foudation/classification';
 export default {
-  components: {winSm, myButton},
+  components: { winSm, myButton },
   props: {
     setting: {
       type: Object,
-      default: () => {
-      }
-    }
+      default: () => {},
+    },
   },
   data() {
     return {
       checkAll: false,
       checkedList: [],
-      options:[
-        {
-          code: 'A',
-          label:'A'
-        },
-        {
-          code: "B",
-          label:'B'
-        },
-        {
-          code: 'c',
-          label:'C'
-        }
-      ],
+      options: [], // 绫诲埆鍒楄〃
       formData: {
-        code: '',
-        name: '',
-        states: '',
-        summary: '',
-        planTypeCode:''
+        fatherCategoryId: '', // 涓婄骇鍒嗙被
+        fatherCategoryName: '',
+        categoryName: '', //鍒嗙被鍚嶇О
+        classification: '', //绫诲埆
+        orderNumber: '', // 椤哄簭
+        states: 1, // 鐘舵��
       },
       rules: {
-        fatherCategoryId: [
-          {required: true, message: '璇疯緭鍏�', trigger: 'blur'}
-        ],
-        categoryName: [
-          {required: true, message: '璇疯緭鍏�', trigger: 'blur'}
-        ]
-      }
-    }
+        fatherCategoryName: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+        categoryName: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+        classification: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        orderNumber: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+      },
+      key: Math.random(),
+      plevels:1
+    };
   },
   created() {
-    if(this.setting.info){
-      this.formData = Object.assign({},JSON.parse(this.setting.info))
+    if (this.setting.title == '缂栬緫') {
+      this.formData = Object.assign({}, JSON.parse(this.setting.info));
+    } else {
+      this.formData.fatherCategoryId = this.setting.pid;
     }
+    this.getCategoryName();
+    getDicts('GOODS_PRICE').then((res) => {
+      this.options = res.map((v) => {
+        v.label = v.dict_label;
+        v.value = v.dict_value;
+        return v;
+      });
+    });
   },
   methods: {
-    getEditInfo(id){
-
+    getEditInfo(id) {},
+    // 鍒嗙被鍚嶇О鑾峰彇
+    getCategoryName() {
+      getCategoryDetail({ id: this.formData.fatherCategoryId }).then((res) => {
+        this.formData.fatherCategoryName = res.categoryName;
+        this.key = Math.random();
+        this.plevels = res.levels
+      });
     },
     close() {
-      this.$emit('close')
+      this.$emit('close');
     },
     save() {
       this.$refs.ruleForm.validate((valid) => {
         if (valid) {
-          const params = Object.assign({}, this.formData)
-          if(this.setting.id){
+          const params = Object.assign({}, this.formData);
+          if (this.setting.id) {
+            debugger;
             // 缂栬緫鎺ュ彛
-            finsystenant.edit(params).then(res => {
-              if (res) {
-                this.$message.success('淇濆瓨鎴愬姛锛�')
-                this.close()
-                this.$emit('search')
-              } else {
-                this.$message.error('淇濆瓨澶辫触')
-              }
-            })
-          }else{
-            params.orgId = this.setting.orgId
-            finsystenant.add(params).then(res => {
-              if (res) {
-                this.$message.success('淇濆瓨鎴愬姛锛�')
-                this.close()
-                this.$emit('search')
-              } else {
-                this.$message.error('淇濆瓨澶辫触')
-              }
-            })
+            finsystenant.edit(params).then((res) => {
+              this.$message.success('淇濆瓨鎴愬姛锛�');
+              this.close();
+              this.$emit('search');
+            });
+          } else {
+            params.orgId = this.setting.orgId;
+            console.log(params);
+            finsystenant
+              .add(params)
+              .then((res) => {
+                this.$message.success('淇濆瓨鎴愬姛锛�');
+                this.close();
+                this.$emit('search');
+              })
+              .catch((err) => {
+                console.log('err', err);
+              });
           }
         } else {
-          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��')
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��');
         }
-      })
-    }
-  }
-}
+      });
+    },
+  },
+};
 </script>
diff --git a/admin-web/src/views/foundation/classification/index.vue b/admin-web/src/views/foundation/classification/index.vue
index 785bf7a..6913db5 100644
--- a/admin-web/src/views/foundation/classification/index.vue
+++ b/admin-web/src/views/foundation/classification/index.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <el-container>
-      <el-card shadow="never" style="width: 240px;margin-right: 15px">
+      <el-card shadow="never" style="width: 240px; margin-right: 15px">
         <my-tree ref="searchTree" :tree-list="treeDataList" @setNode="nodeClick" @search="search"></my-tree>
       </el-card>
       <el-container>
@@ -13,11 +13,11 @@
           <el-row style="margin-top: 15px">
             <el-col>
               <!--鍒楄〃-->
-              <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+              <my-table-v2 ref="myTable" :filter="filterFrom" :table="table" />
             </el-col>
           </el-row>
           <!--娣诲姞/缂栬緫寮圭獥-->
-          <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"/>
+          <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="refreshData" />
         </el-card>
       </el-container>
     </el-container>
@@ -30,19 +30,22 @@
 </template>
 
 <script>
-import myTree from '@/components/myTree/index'
-import MyTableV2 from "@/components/myTable/myTableV2";
-import MyButton from "@/components/myButton/myButton";
+import myTree from '@/components/myTree/index';
+import MyTableV2 from '@/components/myTable/myTableV2';
+import MyButton from '@/components/myButton/myButton';
 import SettingIplatform from '@/utils/settingIplatform';
-import items from './items'
-import edit from './edit'
-import * as finsystenant from '@/api/baseSetting/finsystenant'
-import myImport from '@/views/components/myImport'
-import {getBaseUrl} from '@/utils/base';
+import items from './items';
+import edit from './edit';
+import * as finsystenant from '@/api/baseSetting/finsystenant';
+import { getTree } from '@/api/foudation/classification';
+import myImport from '@/views/components/myImport';
+import { getBaseUrl } from '@/utils/base';
+import {getType} from '@/api/system/dict/type'
+import {getDicts} from '@/api/system/dict/data'
 
 export default {
-  name: "index",
-  components: {MyButton, MyTableV2, edit, myTree, myImport},
+  name: 'index',
+  components: { MyButton, MyTableV2, edit, myTree, myImport },
   data() {
     return {
       // 鎼滅储妗�
@@ -54,25 +57,25 @@
         tenantId: null,
         userName: null,
         userPhone: null,
-        states: 1
+        states: 1,
       },
       // 瀵煎叆
       importSetting: {
-          dialogTitle: '瀵煎叆',
-          dialogShow: false,
-          fileSettings: {
-              data: {},
-              uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃
-              accept: '.xls', // 鏍煎紡
-              type: 'text', // 鍥炴樉褰㈠紡
-              loading: false // 瀵煎叆鏁堟灉
-          },
-          /* 妯℃澘涓嬭浇 */
-          templateSettings: {
-              templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О
-              templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃
-          },
-          onSuccess: null
+        dialogTitle: '瀵煎叆',
+        dialogShow: false,
+        fileSettings: {
+          data: {},
+          uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃
+          accept: '.xls', // 鏍煎紡
+          type: 'text', // 鍥炴樉褰㈠紡
+          loading: false, // 瀵煎叆鏁堟灉
+        },
+        /* 妯℃澘涓嬭浇 */
+        templateSettings: {
+          templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О
+          templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃
+        },
+        onSuccess: null,
       },
       editSetting: {
         title: '',
@@ -87,11 +90,13 @@
         url: SettingIplatform.apiBaseURL + '/pc/base/category/list', // 璇锋眰鍦板潃
         // 宸ュ叿鏉�
         tools: {
-          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
-            show: false
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false,
           },
-          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
-            show: false
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false,
           },
           // 鑷畾涔夊伐鍏锋潯鎸夐挳
           custom: [
@@ -101,40 +106,41 @@
                 this.showAdd(null);
               },
             },
-          ]
+          ],
         },
         // 鍒椾俊鎭�
         columns: [
-          {title: '鍒嗙被鍚嶇О', field: 'categoryName', align: 'center'},
-          {title: '绫诲埆', field: 'classification', align: 'left'},
-          {title: '鏄剧ず椤哄簭', field: 'orderNumber', align: 'center', width: '80px'},
+          { title: '鍒嗙被鍚嶇О', field: 'categoryName', align: 'center' },
+          { title: '绫诲埆', field: 'classification', align: 'left' },
+          { title: '鏄剧ず椤哄簭', field: 'orderNumber', align: 'center', width: '80px' },
           {
             field: 'states',
             title: '鐘舵��',
             align: 'center',
             width: 100,
-            switch: row => {
-              const result = {}
+            switch: (row) => {
+              const result = {};
               if (row.states == 1) {
                 Object.assign(result, {
                   value: true, // 寮�
                   label: '鏄�', // 寮�鐨勬弿杩�
-                  click: () => { // 鐐瑰嚮浜嬩欢
-                    this.updState(row)
-                  }
-                })
+                  click: () => {
+                    // 鐐瑰嚮浜嬩欢
+                    this.updState(row);
+                  },
+                });
               } else {
                 Object.assign(result, {
                   value: false, // 鍏�
                   label: '鍚�', // 鍏崇殑鎻忚堪
                   click: () => {
-                    this.updState(row)
-                  }
-                })
+                    this.updState(row);
+                  },
+                });
               }
-              return result
-            }
-          }
+              return result;
+            },
+          },
         ],
         // 鎿嶄綔淇℃伅
         operation: {
@@ -152,7 +158,7 @@
               events: (row) => {
                 this.del(row);
               },
-            }
+            },
           ],
         },
         paging: {
@@ -162,81 +168,88 @@
             small: false,
             pageNum: 1,
             pageSize: 10,
-            total: 0
-          }
-        }
+            total: 0,
+          },
+        },
       },
-    }
+    };
   },
   created() {
     // 鑾峰彇鏈烘瀯鏍�
-    this.initTreeData()
+    this.initTreeData();
+    // 绫诲埆瀛楀吀
+    getDicts('GOODS_PRICE').then(res=>{
+      this.items[1].options = res.map(v=>{
+        v.label=v.dict_label
+        v.value=v.dict_value
+        return v
+      })
+    })
   },
   methods: {
     //瀵煎叆
     importOrg() {
-        this.importSetting.dialogShow = true
-        this.importSetting.onSuccess = (response, callBack) => {
-            if (response.code===1){
-              this.$message.success(response.msg)
-              this.search(1)
-            }else{
-              this.$message.warning(response.msg)
-            }
-            callBack()
+      this.importSetting.dialogShow = true;
+      this.importSetting.onSuccess = (response, callBack) => {
+        if (response.code === 1) {
+          this.$message.success(response.msg);
+          this.search(1);
+        } else {
+          this.$message.warning(response.msg);
         }
+        callBack();
+      };
     },
     // 宸︿晶鏍戝垵濮嬪寲
     initTreeData() {
-      finsystenant.getTree().then(res => {
+      getTree().then((res) => {
         console.log(res, 'restree');
-        console.log(this.importSetting,'this.importSetting');
-        const content = res || []
+        console.log(this.importSetting, 'this.importSetting');
+        const content = res || [];
         // this.treeDataList.splice(0, this.treeDataList.length)
-        this.treeDataList = content
+        this.treeDataList = content;
         // if (content.length > 0) {
         //   this.importSetting.fileSettings.data = {pid: content[0].id}
         // }
-      })
+      });
     },
     updState(row) {
-      let vm = this
-      let text = row.states == 0 ? "鍚敤" : "绂佺敤";
+      let vm = this;
+      let text = row.states == 0 ? '鍚敤' : '绂佺敤';
       vm.$modal.confirm('纭瑕�' + text + '"' + row.categoryName + '"鍚楋紵').then(function () {
-        let params = Object.assign({}, row)
-        params.states = row.states == 1 ? 0 : 1
-        finsystenant.edit(params).then(res => {
+        let params = Object.assign({}, row);
+        params.states = row.states == 1 ? 0 : 1;
+        finsystenant.edit(params).then((res) => {
           if (res) {
-            row.states = row.states === 1 ? 0 : 1
-            vm.$modal.msgSuccess(text + "鎴愬姛");
-            vm.search()
+            row.states = row.states === 1 ? 0 : 1;
+            vm.$modal.msgSuccess(text + '鎴愬姛');
+            vm.search();
           }
-        })
-      })
+        });
+      });
     },
     del(row) {
       this.$modal
         .confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.categoryName + '"鐨勬満鏋勫悧锛�')
         .then(function () {
-          finsystenant.del({id: row.id}).then((res) => {
-          });
+          finsystenant.del({ id: row.id }).then((res) => {});
         })
         .then((res) => {
           this.$message.success('鍒犻櫎鎴愬姛锛�');
-          this.search()
+          this.search();
         })
-        .catch(() => {
-        });
+        .catch(() => {});
     },
     showAdd() {
-      // if (!this.editSetting.orgId) {
-      //   this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯')
-      // } else {
-        this.editSetting.id = null;
-        this.editSetting.info = null;
-        this.editSetting.title = '鏂板';
-        this.editSetting.show = true;
-      // }
+      if (!this.editSetting.orgId) {
+        this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯')
+      } else {
+      this.editSetting.pid = this.p.id;
+      this.editSetting.id = null;
+      this.editSetting.info = null;
+      this.editSetting.title = '鏂板';
+      this.editSetting.show = true;
+      }
     },
     showAudit(row) {
       this.editSetting.id = row.id;
@@ -246,37 +259,42 @@
     },
     nodeClick(param) {
       console.log(param, 'param');
-      param = param || {}
-      this.p = Object.assign({}, {
-        id: param.id,
-        name: param.name
-      })
+      param = param || {};
+      this.p = Object.assign(
+        {},
+        {
+          id: param.id,
+          name: param.name,
+        },
+      );
       if (this.p.id != undefined && this.p.id != null) {
-        this.filterFrom.tenantId = this.p.id
-        this.editSetting.orgId = this.p.id
+        this.filterFrom.fatherCategoryId = this.p.id;
+        this.editSetting.orgId = this.p.id;
       } else {
-        this.filterFrom.tenantId = null
-        this.editSetting.orgId = null
+        this.filterFrom.fatherCategoryId = null;
+        this.editSetting.orgId = null;
       }
-      this.importSetting.fileSettings.data = {pid: param.id}
-      this.search(1)
+      this.importSetting.fileSettings.data = { pid: param.id };
+      this.search(1);
     },
     // 鏌ヨtable鍒楄〃
     search(pageNum) {
       if (pageNum != undefined) {
-        this.$refs.myTable.search(pageNum)
+        this.$refs.myTable.search({pageNum});
       } else {
-        this.$refs.myTable.search()
+        this.$refs.myTable.search();
       }
     },
+    refreshData() {
+      this.initTreeData()
+      this.search()
+    },
     fifterForm(params) {
-      this.filterFrom = Object.assign(this.filterFrom, params)
-      this.search(1)
-    }
-  }
-}
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search(1);
+    },
+  },
+};
 </script>
 
-<style scoped>
-
-</style>
+<style scoped></style>
diff --git a/admin-web/src/views/foundation/classification/items.js b/admin-web/src/views/foundation/classification/items.js
index 6537de7..b40b94c 100644
--- a/admin-web/src/views/foundation/classification/items.js
+++ b/admin-web/src/views/foundation/classification/items.js
@@ -12,20 +12,7 @@
     label: '绫诲埆',
     placeholder: '璇烽�夋嫨',
     defaultValue: '',
-    options: [
-      {
-        label: 'A',
-        value: 'A'
-      },
-      {
-        label: 'B',
-        value: 'B'
-      },
-      {
-        label: 'C',
-        value: 'C'
-      }
-    ]
+    options: []
   },
   {
     type: 'select',
diff --git a/admin-web/src/views/stock/procure/purchaseOrder/detail.vue b/admin-web/src/views/stock/procure/purchaseOrder/detail.vue
new file mode 100644
index 0000000..35f7d41
--- /dev/null
+++ b/admin-web/src/views/stock/procure/purchaseOrder/detail.vue
@@ -0,0 +1,147 @@
+<template>
+  <el-dialog
+    title="璇︽儏"
+    width="60%"
+    :modal="true"
+    :visible.sync="visible"
+    :top="'15vh'"
+    :close-on-click-modal="false"
+    :append-to-body="true"
+    :destroy-on-close="true"
+    @close="close"
+  >
+    <el-row :gutter="20">
+      <el-col :span="8">
+        <span>鍏ュ簱鍗曞彿锛�</span>
+        <span>{{ detail.businessFormCode }}</span>
+      </el-col>
+      <el-col :span="8">
+        <span>鍏ュ簱浠撳簱锛�</span>
+        <span>{{ detail.goodsTemplateName }}</span>
+      </el-col>
+      <el-col :span="8">
+        <span>鎵�灞炴満鏋勶細</span>
+        <span>{{ detail.agencyId }}</span>
+      </el-col>
+    </el-row>
+    <el-row :gutter="20" style="margin-top: 20px">
+      <el-col :span="8">
+        <span>鐘舵�侊細</span>
+        <span>{{ detail.states==1?'寰呭叆搴�':'宸插叆搴�' }}</span>
+      </el-col>
+      <el-col :span="8">
+        <span>鍒涘缓浜猴細</span>
+        <span>{{ detail.buyerName }}</span>
+      </el-col>
+      <el-col :span="8">
+        <span>鍏ュ簱鏃堕棿锛�</span>
+        <span>{{ detail.time }}</span>
+      </el-col>
+    </el-row>
+    <el-row :gutter="20" style="margin-top: 20px">
+      <el-col class="img-row" :span="24">
+        <span>閲囪喘鎵嬬画鐓х墖锛�</span>
+        <div class="img-box"></div>
+      </el-col>
+    </el-row>
+    <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.procureGoods" :key="goodsIndex">
+      <el-row :gutter="20">
+        <el-col :span="8">
+          <span>鐗╁搧鍒嗙被锛�</span>
+          <span>{{ goodsItem.baseCategoryId }}</span>
+        </el-col>
+        <el-col :span="8">
+          <span>鐗╁搧鍚嶇О锛�</span>
+          <span>{{ goodsItem.baseGoodsTemplateId }}</span>
+        </el-col>
+        <el-col :span="8">
+          <span>渚涜揣鍟嗭細</span>
+          <span>{{ goodsItem.supplier }}</span>
+        </el-col>
+      </el-row>
+      <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px;">
+        <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center">
+          <template slot-scope="scope">
+            {{ scope.row.baseGoodsModelsId }}
+          </template>
+        </el-table-column>
+        <el-table-column label="鍗曚綅" align="center">
+          <template slot-scope="scope">
+            {{ scope.row.unit }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center">
+          <template slot-scope="scope">
+            <el-input v-model="scope.row.price"></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column prop="counts" label="鍑哄簱鏁伴噺" align="center">
+          <template slot-scope="scope">
+            <el-input v-model="scope.row.counts"></el-input>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+  </el-dialog>
+</template>
+<script>
+import {
+  procureDetail,
+} from '@/api/stock/procure/purchaseOrder';
+export default {
+  data() {
+    return {
+      visible: false,
+      detail: {
+        businessFormCode:'',
+        goodsTemplateName:'',
+        agencyId:'',
+        states:'',
+        createName:'',
+        time:'',
+        procureGoods:[{},{}]
+      },
+    };
+  },
+  methods: {
+    open(id) {
+      this.visible = true;
+      procureDetail({ id }).then(res=>{
+        this.detail = res
+      })
+    },
+    close() {
+      this.visible = false;
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.img-row {
+  display: flex;
+  align-content: center;
+}
+.img-box {
+  display: inline-block;
+  width: 80px;
+  height: 80px;
+  background: #f9f9f9;
+  margin-right: 20px;
+  img {
+    width: 100%;
+  }
+}
+
+.goods-card {
+  position: relative;
+  background: #f6f6f6;
+  padding: 20px;
+  box-sizing: border-box;
+  border-radius: 4px;
+  background-color: #f9f9f9;
+  margin-top: 20px;
+  &:nth-of-type(1) {
+    margin-top: 0;
+  }
+}
+</style>
diff --git a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
new file mode 100644
index 0000000..93e1c42
--- /dev/null
+++ b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
@@ -0,0 +1,511 @@
+<template>
+  <el-dialog
+    :title="`${type == 'create' ? '鏂板' : '缂栬緫'}${title}`"
+    width="60%"
+    :modal="true"
+    :visible.sync="visible"
+    :top="'15vh'"
+    :close-on-click-modal="false"
+    :append-to-body="true"
+    :destroy-on-close="true"
+    @close="close"
+  >
+    <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
+      <div class="main-w">
+        <el-row :gutter="24" class="headerHeight">
+          <el-col :span="12">
+            <el-form-item label="鍏ュ簱浠撳簱" prop="warehouseId">
+              <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%">
+                <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="閲囪喘鏃堕棿" prop="procureTime">
+              <el-date-picker
+                v-model="formData.procureTime"
+                type="datetime"
+                value="yyyy-MM-dd HH:mm:ss"
+                value-format="yyyyMMddHHmmss"
+                placeholder="璇烽�夋嫨鏃ユ湡"
+                style="width: 100%"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="24" class="headerHeight">
+          <el-col :span="24">
+            <el-form-item label="閲囪喘鍏ュ簱鎵嬬画" prop="procureDoc">
+              <upload :settings="uploadSettings" @on-change="uploadChange"></upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.procureGoods" :key="goodsIndex">
+          <el-row :gutter="24">
+            <el-col :span="12">
+              <el-form-item
+                label="鐗╁搧鍒嗙被"
+                :prop="`procureGoods[${goodsIndex}].baseCategoryIds`"
+                :rules="{
+                  required: true,
+                  message: '璇烽�夋嫨',
+                  trigger: 'change',
+                }"
+              >
+                <el-cascader
+                  v-model="goodsItem.baseCategoryIds"
+                  :options="categoryOptions"
+                  :props="{ value: 'id' }"
+                  @change="categoryChange($event, goodsIndex)"
+                  style="width: 100%"
+                ></el-cascader>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item
+                label="鐗╁搧鍚嶇О"
+                :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`"
+                :rules="{
+                  required: true,
+                  message: '璇烽�夋嫨',
+                  trigger: 'change',
+                }"
+              >
+                <el-select
+                  v-model="goodsItem.baseGoodsTemplateId"
+                  placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
+                  filterable
+                  :disabled="!goodsItem.baseCategoryId"
+                  style="width: 100%"
+                  @change="goodsTemplateChange($event, goodsIndex)"
+                >
+                  <el-option
+                    v-for="item in goodsItem.goodsOptions"
+                    :key="item.id"
+                    :label="item.goodsName"
+                    :value="item.id"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="24">
+            <el-col :span="12">
+              <el-form-item
+                label="瑙勬牸鍨嬪彿"
+                :prop="`procureGoods[${goodsIndex}].modelsIds`"
+                :rules="{
+                  required: true,
+                  message: '璇烽�夋嫨',
+                  trigger: 'change',
+                }"
+              >
+                <el-select
+                  v-model="goodsItem.modelsIds"
+                  multiple
+                  placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
+                  :disabled="!goodsItem.baseCategoryId"
+                  @change="modelChange($event, goodsIndex)"
+                  @remove-tag="modelRemoveTag($event, goodsIndex)"
+                  style="width: 100%"
+                >
+                  <el-option
+                    v-for="item in goodsItem.modelsOptions"
+                    :key="item.id"
+                    :label="item.modelName"
+                    :value="item.id"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="渚涜揣鍟�" prop="supplier">
+                <el-input v-model="goodsItem.supplier" clearable maxlength="20" show-word-limit />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-table :data="goodsItem.models" :stripe="true">
+            <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center">
+              <template slot-scope="scope">
+                {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }}
+              </template>
+            </el-table-column>
+            <el-table-column label="鍗曚綅" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.unit }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="price" label="鍗曚环锛堝厓锛�" align="center">
+              <template slot-scope="scope">
+                <el-input type="number" v-model="scope.row.price"></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column prop="counts" label="閲囪喘鏁伴噺" align="center">
+              <template slot-scope="scope">
+                <el-input type="number" v-model="scope.row.counts"></el-input>
+              </template>
+            </el-table-column>
+          </el-table>
+          <div class="btn-group">
+            <el-button
+              v-if="formData.procureGoods.length > 1"
+              name="绉婚櫎"
+              type="danger"
+              plain
+              size="mini"
+              @click="removeGoods(goodsIndex)"
+              >绉婚櫎</el-button
+            >
+            <el-button
+              v-if="formData.procureGoods.length - 1 == goodsIndex"
+              name="鏂板鐗╁搧"
+              type="primary"
+              plain
+              size="mini"
+              @click="addGoods"
+              >鏂板鐗╁搧</el-button
+            >
+          </div>
+        </div>
+      </div>
+    </el-form>
+    <div slot="footer" align="center" class="dialog-footer">
+      <el-button name="纭畾" site="form" type="primary" @click="handleSubmit">纭畾</el-button>
+      <el-button name="鍙栨秷" site="form" @click="close">鍙栨秷</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+import {
+  goodsTemplate,
+  procureAdd,
+  procureEdit,
+  selectTenantWarehouse,
+  goodsModel,
+  procureDetail,
+} from '@/api/stock/procure/purchaseOrder';
+import { getTree } from '@/api/foudation/classification';
+import MyButton from '@/components/myButton/myButton';
+import winMd from '@/components/win/win-md';
+import upload from '@/components/upload/index';
+import { getUploadUrl } from '@/utils/base';
+
+import SettingIplatform from '../../../../../public/static/config';
+
+export default {
+  components: { MyButton, winMd, upload },
+  props: {
+    title: {
+      type: String,
+      default: '閲囪喘鍏ュ簱',
+    },
+  },
+  data() {
+    return {
+      type: 'create',
+      visible: false,
+      loading: false,
+      warehouses: [], // 鍏ュ簱浠撳簱鍒楄〃
+      categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃
+      modelList: [], //鍨嬪彿鍒楄〃
+      formData: {
+        warehouseId: '', // 鍏ュ簱浠撳簱id
+        procureTime: '', // 閲囪喘鏃堕棿
+        procureGoods: [],
+      },
+      goodsItem: {
+        whFormProcureId: '', // 閲囪喘鍗旾D
+        baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍
+        baseCategoryId: '', // 鍒嗙被缂栧彿
+        baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿
+        goodsTemplateName: '', // 鐗╁搧妯$増鍚嶇О
+        supplier: '', // 渚涘簲鍟�
+        sort: '', // 鏄剧ず椤哄簭
+        goodsOptions: [], // 鐗╁搧鍒楄〃select
+        modelsOptions: [], //瑙勬牸鍨嬪彿select
+        models: [], // 鐗╁搧鍚嶇О
+        modelsIds: [], //瑙勬牸鍨嬪彿
+      },
+      modelsItem: {
+        baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿
+        price: 0, // 鍗曚环(閲囪喘闇�瑕侊紝璋冩嫧涓嶉渶瑕�)
+        counts: 0, // 鎿嶄綔鏁伴噺
+        supplier: '', // 渚涘簲鍟�
+        unit: null, //鍗曚綅
+      },
+      rules: {
+        warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+
+        // procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
+        baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+      },
+
+      uploadSettings: {
+        title: '涓婁紶',
+        max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M
+        num: 2, // 鏀寔涓婁紶鍥剧墖涓暟
+        accept: '.jpg,.png', // 闄愬埗鏍煎紡
+        tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb`
+        uploadUrl: getUploadUrl(), // 涓婁紶璺緞
+        multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶
+        disabled: false, // 鏄惁绂佺敤
+        type: 'text', // text/picture
+      },
+    };
+  },
+  created() {},
+  methods: {
+    async open(id) {
+      this.getWarehouseList();
+      this.getgoodsModel();
+      // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
+      const treeRes = await getTree();
+      this.categoryOptions = this.removeEmptyChildren(treeRes);
+      if (id) {
+        this.type = 'edit';
+        const detail = await procureDetail({ id });
+        console.log('procureDetail', detail);
+        this.formData = Object.assign(this.formData, detail);
+        this.formData.procureTime = this.formData.procureTime.toString();
+        this.formData.procureGoods.map((item, index) => {
+          // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃
+          let pIds = this.findParentIds(this.categoryOptions, item.baseCategoryId);
+          pIds = pIds.reverse();
+          item.baseCategoryIds = [...pIds, item.baseCategoryId];
+          item.modelsIds = item.models.map((v) => v.baseGoodsModelsId);
+          this.getgoodsTemplate(item.baseCategoryId, index);
+          this.getgoodsModel(item.baseGoodsTemplateId, index);
+        });
+      } else {
+        this.type = 'create';
+        this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
+      }
+      this.visible = true;
+    },
+
+    // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃
+    getWarehouseList() {
+      selectTenantWarehouse()
+        .then((res) => {
+          this.warehouses = res;
+          if (this.warehouses.length && !this.formData.warehouseId) {
+            // 榛樿閫変腑绗竴涓粨搴�
+            this.formData.warehouseId = this.warehouses[0].id;
+          }
+        })
+        .catch((err) => {
+          console.log('err', err);
+        });
+    },
+
+    removeEmptyChildren(arr) {
+      arr.forEach((item) => {
+        if (!item.children || !item.children.length) {
+          delete item.children;
+        } else {
+          this.removeEmptyChildren(item.children);
+        }
+      });
+      return arr;
+    },
+
+    // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
+    getgoodsTemplate(id, index) {
+      goodsTemplate({ categoryId: id || '' }).then((res) => {
+        if (index || index == 0) {
+          this.$set(this.formData.procureGoods[index], 'goodsOptions', res);
+        }
+      });
+    },
+
+    // 瑙勬牸鍨嬪彿
+    getgoodsModel(id, index) {
+      goodsModel({ goodsTemplatesId: id || '' }).then((res) => {
+        if (index || index == 0) {
+          this.$set(this.formData.procureGoods[index], 'modelsOptions', res);
+        } else {
+          this.goodsModelAll = res;
+        }
+      });
+    },
+
+    // 鏍规嵁瑙勬牸鍨嬪彿id鑾峰彇鍚嶅瓧
+    getGoodsModelsName(id) {
+      let item = this.goodsModelAll.find((v) => v.id == id);
+      if (item) {
+        return item.modelName;
+      }
+      return;
+    },
+
+    // 鐗╁搧鍒嗙被閫夋嫨
+    categoryChange(e, index) {
+      this.formData.procureGoods[index].goodsOptions = []
+      this.formData.procureGoods[index].baseCategoryId = ''
+
+      this.formData.procureGoods[index].baseCategoryId = e[e.length - 1];
+      // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
+      this.getgoodsTemplate(e[e.length - 1], index);
+    },
+
+    // 鐗╁搧鍚嶇О鍒楄〃
+    goodsTemplateChange(e, index) {
+      this.formData.procureGoods[index].modelsOptions = []
+      this.formData.procureGoods[index].modelsIds = []
+      this.formData.procureGoods[index].models = []
+
+      // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃
+      this.getgoodsModel(e, index);
+    },
+
+    // 瑙勬牸鍨嬪彿閫夋嫨
+    modelChange(e, index) {
+      let arr = [...this.formData.procureGoods[index].models];
+      let str = JSON.stringify(arr);
+      e.forEach((item) => {
+        if (str.indexOf(item) == -1) {
+          let temp = this.goodsModelAll.find((v) => v.id == item);
+          arr.push({ ...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit });
+        }
+      });
+      this.formData.procureGoods[index].models = arr;
+    },
+
+    // 瑙勬牸鍨嬪彿绉婚櫎
+    modelRemoveTag(e, index) {
+      let arr = this.formData.procureGoods[index].models;
+      let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
+      this.formData.procureGoods[index].models.splice(delIndex, 1);
+    },
+
+    // 涓婁紶
+    uploadChange(e) {
+      console.log('uploadChange', e);
+    },
+
+    // 鐐瑰嚮鏂板鐗╁搧
+    addGoods() {
+      this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
+    },
+
+    // 鐐瑰嚮绉婚櫎
+    removeGoods(index) {
+      this.formData.procureGoods.splice(index, 1);
+    },
+
+    // 鎻愪氦
+    handleSubmit() {
+      this.$refs['ruleForm'].validate((valid) => {
+        if (valid) {
+          console.log('this.formData', this.formData);
+          if (this.type == 'create') {
+            procureAdd(this.formData)
+              .then((res) => {
+                this.$message.success('淇濆瓨鎴愬姛锛�');
+                this.close();
+                this.$emit('search');
+              })
+              .catch((err) => {
+                console.log('create err', err);
+                this.$message.error('淇濆瓨澶辫触');
+              });
+          } else {
+            procureEdit(this.formData)
+              .then((res) => {
+                this.$message.success('淇濆瓨鎴愬姛锛�');
+                this.close();
+                this.$emit('search');
+              })
+              .catch((err) => {
+                console.log('edit err', err);
+                this.$message.error('淇濆瓨澶辫触');
+              });
+          }
+        } else {
+          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��');
+        }
+      });
+    },
+
+    close() {
+      this.formData ={
+        warehouseId: '', // 鍏ュ簱浠撳簱id
+        procureTime: '', // 閲囪喘鏃堕棿
+        procureGoods: [],
+      }
+      this.visible = false;
+    },
+
+    // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁�
+    findParentIds(dataSource, nodeId) {
+      const parentIds = []; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
+
+      // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣
+      function traverse(node, nodeId) {
+        if (node.id === nodeId) {
+          // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣
+          return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
+        }
+
+        if (node.children) {
+          // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐�
+          for (const childNode of node.children) {
+            if (traverse(childNode, nodeId)) {
+              // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
+              parentIds.push(node.id);
+              return true;
+            }
+          }
+        }
+
+        return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse
+      }
+
+      // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣
+      for (const node of dataSource) {
+        if (traverse(node, nodeId)) {
+          // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜�
+          break;
+        }
+      }
+
+      return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.main-w {
+  width: 88%;
+}
+.goods-card {
+  position: relative;
+  background: #f6f6f6;
+  padding: 20px;
+  box-sizing: border-box;
+  border-radius: 4px;
+  background-color: #f9f9f9;
+  margin-top: 20px;
+  &:nth-of-type(1) {
+    margin-top: 0;
+  }
+}
+.btn-group {
+  width: 140px;
+  position: absolute;
+  right: -160px;
+  bottom: 0px;
+  .el-button {
+    margin-bottom: 10px;
+    margin-left: 0;
+    display: block;
+    &:last-child {
+      margin-bottom: 0;
+    }
+  }
+}
+</style>
diff --git a/admin-web/src/views/stock/procure/purchaseOrder/index.vue b/admin-web/src/views/stock/procure/purchaseOrder/index.vue
index e5f7a65..826f06f 100644
--- a/admin-web/src/views/stock/procure/purchaseOrder/index.vue
+++ b/admin-web/src/views/stock/procure/purchaseOrder/index.vue
@@ -1,126 +1,92 @@
 <template>
   <div class="app-container">
     <el-container>
-      <el-container>
-        <el-card class="box-card" style="width: 100%" shadow="never">
-          <!--鎼滅储鏉′欢-->
-          <div class="filter-container">
-            <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
-          </div>
-          <el-row style="margin-top: 15px">
-            <el-col>
-              <!--鍒楄〃-->
-              <my-button name="鏂板" @click="addtable" site="form" />
-              <div :style="{'overflow-y': 'auto', height:`${clientHeight - 320}px`}">
-                    <el-row class="card"
-                            :gutter="5">
-                        <el-col v-for="(item, index) in proData" :key="index" class="cm-item">
-                          <el-card class="card-data">
-                            <div class="card-container">
-                              <div class="hed-one"> <span>鍏ュ簱鍗曞彿锛歿{ item.order_no }}</span><span style="margin-left: 20px;"><el-button type="warning" plain size="mini">寰呭叆搴�</el-button></span></div>
-                              <div class="one-hed">
-                                <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.customer_name }}</div>
-                                <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.customer_name }}</div>
-                                <div class="box"><span class="span-two">鍑哄簱鏃堕棿锛�</span>{{ item.customer_name }}</div>
-                                <div class="box"><span class="span-two">鍏ュ簱鏃堕棿锛�</span>{{ item.customer_name }}</div>
-                              </div>
-                              <div class="card-end">
-                                <div v-for="(just, index) in item.data" class="two-end">
-                                  <div class="item"><span>{{ just.order_no }}锛�</span>{{ just.customer_name }}</div>
-                                </div>
-                              </div>
+      <el-card class="box-card" style="width: 100%" shadow="never">
+        <!--鎼滅储鏉′欢-->
+        <div class="filter-container">
+          <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search>
+        </div>
+        <el-row style="margin-top: 15px">
+          <el-col>
+            <!--鍒楄〃-->
+            <my-button name="鏂板" @click="addtable" site="tools" size="medium" />
+            <my-button name="瀵煎叆" @click="importSetting.dialogShow = true" site="tools" size="medium" />
+            <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }" v-loading="loading">
+              <el-row class="card" :gutter="5">
+                <el-col v-for="(item, index) in list" :key="index" class="cm-item">
+                  <el-card class="card-data">
+                    <div class="card-container">
+                      <div class="card-header">
+                        <div class="card-header-left">
+                          <span>鍏ュ簱鍗曞彿锛�</span>
+                          <span class="value">{{ item.businessFormCode }}</span>
+                          <div class="states" :class="item.states==1?'':'states-income'">{{ item.states == 1 ? '寰呭叆搴�' : '宸插叆搴�' }}</div>
+                        </div>
+                        <div class="card-header-right">
+                          <template v-if="item.states == 1">
+                            <el-button name="缂栬緫" site="form" type="success" size="mini" @click="handleEdit(item)"
+                              >缂栬緫</el-button
+                            >
+                            <el-button name="鍏ュ簱" site="form" type="primary" size="mini" @click="handleIncome(item)"
+                              >鍏ュ簱</el-button
+                            >
+                            <el-button name="鍒犻櫎" site="form" type="danger" size="mini" @click="del(item)"
+                              >鍒犻櫎</el-button
+                            >
+                          </template>
+                          <template v-if="item.states != 1">
+                            <el-button site="form" type="success" size="mini" @click="handleExport(item)"
+                              >瀵煎嚭鍏ュ簱鍗�</el-button
+                            >
+                          </template>
+                          <el-button name="鏌ョ湅璇︽儏" site="form" type="info" size="mini" @click="handleDetail(item)"
+                            >鏌ョ湅璇︽儏</el-button
+                          >
+                        </div>
+                      </div>
+                      <div class="one-hed">
+                        <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.agencyId }}</div>
+                        <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.buyerName }}</div>
+                        <div class="box"><span class="span-two">鍑哄簱鏃堕棿锛�</span>{{ item.procureTime }}</div>
+                        <div class="box"><span class="span-two">鍏ュ簱鏃堕棿锛�</span>{{ item.procureTime }}</div>
+                      </div>
+                      <div class="card-end">
+                        <div v-for="(just, index) in item.models" :key="index" class="item">
+                          <div class="name">{{ just.baseGoodsModelsId }}</div>
+                          <div class="value-box">
+                            <div class="value-box-item">
+                              <span class="label">鏁伴噺锛�</span>
+                              <span class="value">{{ just.counts }}</span>
                             </div>
-                            <div class="card-but">
-                              <div>
-                                <my-button style="width: 120px;" name="缂栬緫"   site="form" />
-                                <my-button style="width: 120px;" name="鍏ュ簱"   site="form" />
-                              </div>
-                              <div  style="margin-top: 10px;">
-                                <my-button style="width: 120px;" name="鍒犻櫎"   site="form" />
-                                <my-button style="width: 120px;" name="鏌ョ湅璇︽儏" site="form" />
-                              </div>
+                            <div class="value-box-item">
+                              <span class="label">閲戦锛�</span>
+                              <span class="value">{{ just.price }}</span>
                             </div>
-                            
-                          </el-card>
-                        </el-col>
-                    </el-row>
-              </div>
-              <el-pagination
-                :small="false"
-                :current-page="1"
-                :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
-                :page-size="10"
-                layout="total, sizes, prev, pager, next, jumper"
-                :total="0"
-                @size-change="handleSizeChange"
-                @current-change="handleCurrentChange"
-              />
-            </el-col>
-          </el-row>
-          <!--娣诲姞/缂栬緫寮圭獥-->
-          <el-dialog title="鏂板鍑哄簱"  :close-on-click-modal="false" :visible.sync="adddialog" width="60%" >
-            <el-form ref="ruleForm" :model="formData" class="demo-ruleForm" label-width="100px">
-              <el-row :gutter="24" class="headerHeight">
-                  <el-col :span="12">
-                    <el-form-item label="浠撳簱鍚嶇О" prop="name">
-                      <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/>
-                    </el-form-item>
-                  </el-col>
-                  <el-col :span="12">
-                    <el-form-item label="浠撳簱鍚嶇О" prop="name">
-                      <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/>
-                    </el-form-item>
-                  </el-col>
-                </el-row>
-                <el-row :gutter="24" class="headerHeight">
-                  <el-col :span="24">
-                    <el-form-item label="鍑哄簱鎵嬬画" prop="name">                      
-                      浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢
-                    </el-form-item>
-                  </el-col>
-                </el-row>
-                <div style="position: relative;">
-                  <div style="background-color: #F9F9F9;width: 90%;">
-                  <el-row :gutter="24" class="">
-                    <el-col :span="12">
-                      <el-form-item label="浠撳簱鍚嶇О" prop="name">
-                        <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/>
-                      </el-form-item>
-                    </el-col>
-                    <el-col :span="12">
-                      <el-form-item label="浠撳簱鍚嶇О" prop="name">
-                        <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/>
-                      </el-form-item>
-                    </el-col>
-                  </el-row>
-                  <el-row :gutter="24" class="">
-                    <el-col :span="12">
-                      <el-form-item label="浠撳簱鍚嶇О" prop="name">
-                        <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/>
-                      </el-form-item>
-                    </el-col>
-                  </el-row>
-                  <el-table :data="formData.tableData" height="100%"  :stripe="true">
-                    <el-table-column prop="projectName" label="瑙勬牸鍨嬪彿" align="center"> </el-table-column>
-                    <el-table-column prop="time1" label="鍗曚綅"  align="center"> </el-table-column>
-                    <el-table-column prop="unit" label="鐜版湁搴撳瓨" align="center"> </el-table-column>
-                    <el-table-column prop="time2" label="鍑哄簱鏁伴噺"  align="center"> </el-table-column>
-                  </el-table>
-                  </div>
-                  <div style="position: absolute;right: 0;top: 152px;">
-                    <my-button style="display: block;margin-left: 10px;margin-bottom: 5px;" name="绉婚櫎" site="form"/>
-                    <my-button name="鏂板鐗╁搧" site="form"/>
-                  </div>
-                </div>
-            </el-form>
-            <div slot="footer" align="center" class="dialog-footer">
-              <my-button name="纭畾" site="form" />
-              <my-button name="鍙栨秷" site="form" @click="adddialog = false"/>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </el-card>
+                </el-col>
+              </el-row>
             </div>
-          </el-dialog>
-        </el-card>
-      </el-container>
+            <el-pagination
+              :small="false"
+              :current-page="pageNum"
+              :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
+              :page-size="pageSize"
+              layout="total, sizes, prev, pager, next, jumper"
+              :total="total"
+              @size-change="handleSizeChange"
+              @current-change="handleCurrentChange"
+            />
+          </el-col>
+        </el-row>
+      </el-card>
     </el-container>
+    <!--娣诲姞/缂栬緫寮圭獥-->
+    <edit ref="editRef"></edit>
+    <detail ref="detailRef"></detail>
     <my-import
       :import-setting="importSetting"
       :dialog-show="importSetting.dialogShow"
@@ -130,196 +96,96 @@
 </template>
 
 <script>
-import MyButton from "@/components/myButton/myButton";
+import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder';
+import MyButton from '@/components/myButton/myButton';
 import SettingIplatform from '@/utils/settingIplatform';
-import myImport from '@/views/components/myImport'
-import {getBaseUrl} from '@/utils/base';
+import myImport from '@/views/components/myImport';
+import edit from './edit';
+import detail from './detail';
+import { getBaseUrl } from '@/utils/base';
 
 export default {
-  name: "index",
-  components: {MyButton, myImport},
+  name: 'index',
+  components: { MyButton, myImport, edit, detail },
   data() {
     return {
-      
+      loading: false,
       adddialog: false,
-      formData:{
-        tableData:[
+      list: [],
+      formData: {
+        tableData: [
           {
-            projectName:'555'
+            projectName: '555',
           },
           {
-            projectName:'444'
-          }
+            projectName: '444',
+          },
         ],
       },
       // 鎼滅储妗�
       items: [
         {
           type: 'text',
-          dataIndex: 'name',
-          label: '鍑哄簱鍗曞彿',
+          dataIndex: 'businessFormCode',
+          label: '鍏ュ簱鍗曞彿',
           placeholder: '璇疯緭鍏�',
-          defaultValue: ''
+          defaultValue: '',
         },
         {
           type: 'text',
-          dataIndex: 'name',
+          dataIndex: 'goodsTemplateName',
           label: '鐗╁搧鍚嶇О',
           placeholder: '鍙ā绯婃悳绱�',
-          defaultValue: ''
+          defaultValue: '',
+        },
+        {
+          type: 'select',
+          dataIndex: 'name',
+          label: '鏈烘瀯',
+          placeholder: '璇烽�夋嫨',
+          defaultValue: '',
+          options: [],
         },
         {
           type: 'text',
-          dataIndex: 'name',
+          dataIndex: 'buyerName',
           label: '鍒涘缓浜�',
           placeholder: '璇疯緭鍏�',
-          defaultValue: ''
+          defaultValue: '',
+        },
+        {
+          type: 'select',
+          dataIndex: 'states',
+          label: '鐘舵��',
+          placeholder: '璇烽�夋嫨',
+          defaultValue: '',
+          options: [
+            {
+              label: '鍏ㄩ儴',
+              value: '',
+            },
+            {
+              label: '寰呭叆搴�',
+              value: '1',
+            },
+            {
+              label: '宸插叆搴�',
+              value: '2',
+            },
+          ],
         },
         {
           type: 'date-picker',
           dataIndex: 'val1',
-          label: '鍑哄簱鏃堕棿',
-          defaultValue: ''
+          label: '鍏ュ簱鏃堕棿',
+          defaultValue: '',
         },
         {
           type: 'date-picker',
           dataIndex: 'val2',
           label: '鑷�',
-          defaultValue: ''
+          defaultValue: '',
         },
-        // {
-        //   type: 'select',
-        //   dataIndex: 'status',
-        //   label: '鐘舵��',
-        //   placeholder: '璇烽�夋嫨',
-        //   defaultValue: '1',
-        //   options: [
-        //     {
-        //       label: '鍚敤',
-        //       value: '1'
-        //     },
-        //     {
-        //       label: '绂佺敤',
-        //       value: '0'
-        //     }
-        //   ]
-        // }
-      ],
-      proData: [
-        {
-          order_no:'55555',
-          customer_name:'666',
-          data:[
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'20浠�'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-          ]
-        },
-        {
-          order_no:'55555',
-          customer_name:'666',
-          data:[
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-          ]
-        },
-        {
-          order_no:'55555',
-          customer_name:'666',
-          data:[
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'20浠�'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-          ]
-        },
-        {
-          order_no:'55555',
-          customer_name:'666',
-          data:[
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'20浠�'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-          ]
-          
-        },
-        {
-          order_no:'55555',
-          customer_name:'666',
-          data:[
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'20浠�'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-          ]
-          
-        },
-        {
-          order_no:'55555',
-          customer_name:'666',
-          data:[
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'20浠�'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-          ]
-          
-        },
-        {
-          order_no:'55555',
-          customer_name:'666',
-          data:[
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'20浠�'
-            },
-            {
-              order_no:'鐭冲嫆鑺鑹茬⒊绮�',
-              customer_name:'666'
-            },
-          ]
-          
-        }
       ],
       // 鏍戞暟鎹�
       treeDataList: [],
@@ -328,25 +194,25 @@
         tenantId: null,
         userName: null,
         userPhone: null,
-        status: 1
+        states: null,
       },
       // 瀵煎叆
       importSetting: {
-          dialogTitle: '瀵煎叆',
-          dialogShow: false,
-          fileSettings: {
-              data: {},
-              uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃
-              accept: '.xls', // 鏍煎紡
-              type: 'text', // 鍥炴樉褰㈠紡
-              loading: false // 瀵煎叆鏁堟灉
-          },
-          /* 妯℃澘涓嬭浇 */
-          templateSettings: {
-              templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О
-              templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃
-          },
-          onSuccess: null
+        dialogTitle: '瀵煎叆',
+        dialogShow: false,
+        fileSettings: {
+          data: {},
+          uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃
+          accept: '.xls', // 鏍煎紡
+          type: 'text', // 鍥炴樉褰㈠紡
+          loading: false, // 瀵煎叆鏁堟灉
+        },
+        /* 妯℃澘涓嬭浇 */
+        templateSettings: {
+          templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О
+          templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃
+        },
+        onSuccess: null,
       },
       editSetting: {
         title: '',
@@ -354,104 +220,223 @@
         orgId: '',
         show: false,
       },
-    }
+      pageNum: 1,
+      pageSize: 10,
+      total: 0,
+    };
   },
   computed: {
-    clientHeight () {
-      return document.documentElement.clientHeight
+    clientHeight() {
+      return document.documentElement.clientHeight;
     },
   },
   created() {
+    this.fetchData();
   },
   methods: {
-    handleSizeChange(){},
-    handleCurrentChange(){},
+    fetchData() {
+      this.loading = true;
+      procureList({
+        pageNum: this.pageNum,
+        pageSize: this.pageSize,
+        ...this.filterFrom,
+      }).then((res) => {
+        this.list = res.datas;
+        this.total = res.totalRows;
+        this.loading = false;
+        console.log(this.list);
+      });
+    },
     //瀵煎叆
     importOrg() {
-        this.importSetting.dialogShow = true
-        this.importSetting.onSuccess = (response, callBack) => {
-            if (response.code===1){
-              this.$message.success(response.msg)
-              this.search(1)
-            }else{
-              this.$message.warning(response.msg)
-            }
-            callBack()
+      this.importSetting.dialogShow = true;
+      this.importSetting.onSuccess = (response, callBack) => {
+        if (response.code === 1) {
+          this.$message.success(response.msg);
+          this.search(1);
+        } else {
+          this.$message.warning(response.msg);
         }
+        callBack();
+      };
     },
-   
+    // 瀵煎嚭
+    handleExport() {
+
+    },
+    // 鏂板
     addtable() {
-      this.adddialog = true
+      this.$refs.editRef.open();
+    },
+    // 缂栬緫
+    handleEdit(row) {
+      this.$refs.editRef.open(row.id);
+    },
+    // 璇︽儏
+    handleDetail(row) {
+      this.$refs.detailRef.open(row.id);
+    },
+    // 鍏ュ簱
+    handleIncome(row) {
+      this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode}  鍏ュ簱鍚�?`, '閲囪喘鍏ュ簱')
+        .then(function () {
+          procureIncome({ id: row.id }).then((res) => {
+            this.$message.success('鍏ュ簱鎴愬姛锛�');
+          });
+        })
+        .then((res) => {
+          this.search();
+        })
+        .catch(() => {});
+    },
+    del(row) {
+      this.$modal
+        .confirm('鏄惁纭鍒犻櫎鍏ュ簱鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�')
+        .then(function () {
+          procureDel({ id: row.id }).then((res) => {});
+        })
+        .then((res) => {
+          this.$message.success('鍒犻櫎鎴愬姛锛�');
+          this.search();
+        })
+        .catch(() => {});
+    },
+    // 鍒嗛〉
+    handleSizeChange(pageSize) {
+      this.pageSize = pageSize;
+      this.search({ pageNum: 1 });
+    },
+    handleCurrentChange(pageNum) {
+      this.myTable.paging.page.pageNum = pageNum;
+      this.search({ pageNum: pageNum });
     },
     // 鏌ヨtable鍒楄〃
     search(pageNum) {
-      if (pageNum != undefined) {
-        // this.$refs.myTable.search(pageNum)
-      } else {
-        // this.$refs.myTable.search()
-      }
+      this.fetchData();
     },
     fifterForm(params) {
-      console.log(params,'555');
-      this.filterFrom = Object.assign(this.filterFrom, params)
-      this.search(1)
-    }
-  }
-}
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search(1);
+    },
+  },
+};
 </script>
 
-<style scoped>
-.card {
-    display: flex;
-    flex-wrap: wrap;
-    margin: 0px !important;
-    .cm-item {
-        width: 100%;
-    }
-    .cm-item /deep/ .el-card__body {
-        padding: 10px;
-    }
+<style scoped lang="scss">
+.ml-20 {
+  margin-left: 20px;
 }
-.card-data{
+.card {
+  display: flex;
+  flex-wrap: wrap;
+  margin: 0px !important;
+  .cm-item {
+    width: 100%;
+  }
+  .cm-item ::v-deep .el-card__body {
+    padding-bottom: 5px;
+  }
+}
+.card-data {
   position: relative;
   margin-top: 8px;
-  .card-container{
-    display: inline-block; 
-    width: 70%;
-    .hed-one{
-      color: #2298EE;
-      font-size: 18px;
+  .card-container {
+    .card-header {
+      height: 48px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      background: #f3f9fe;
+      padding: 0 32px 0 15px;
+      box-sizing: border-box;
     }
-    .one-hed{
-      margin-top: 15px;
-      .box{
-        display: inline-block;  
-        margin-right: 20px;  
+    .card-header-left {
+      display: flex;
+      align-items: center;
+      color: #999999;
+      font-family: 'Microsoft YaHei UI';
+      font-size: 18px;
+      font-weight: 700;
+      .value {
+        color: #3d3d3d;
+      }
+
+      .states {
+        width: 54px;
+        height: 22px;
+        line-height: 22px;
+        text-align: center;
+        border-radius: 4px;
+        border: 1px solid #f9675b99;
+        background: #f9675b1a;
+        font-family: 'Microsoft YaHei';
+        color: #f9675b;
+        font-size: 13px;
+        font-style: normal;
+        font-weight: 400;
+        margin-left: 8px;
+      }
+      .states-income {
+        border: 1px solid #39ad6199;
+        background: #39ad610f;
+        color: #39ad61;
       }
     }
-    .span-two{
-      color: #83919e;
-      font-size: 14px;
+    .one-hed {
+      margin-top: 15px;
+      padding: 0 32px 0 15px;
+      box-sizing: border-box;
+      .box {
+        display: inline-block;
+        margin-right: 20px;
+      }
+      .span-two {
+        color: #83919e;
+        font-size: 14px;
+      }
     }
-    .card-end{
+    .card-end {
       font-size: 14px;
       color: #3d3d3d;
       margin-top: 15px;
-      display: flex;  
-      flex-wrap: wrap; 
-      .two-end{
-        width: calc(33.33% - 20px); 
-        margin-bottom: 15px; 
+      display: flex;
+      flex-wrap: wrap;
+      font-family: 'Microsoft YaHei UI';
+      padding: 0 16px;
+      box-sizing: border-box;
+      .item {
+        width: 379px;
+        height: 60px;
+        padding: 8px 12px 9px 12px;
+        box-sizing: border-box;
+        align-items: center;
+        gap: 8px;
+        flex-shrink: 0;
+        background: #f9f9f9;
+        margin-right: 15px;
+        margin-bottom: 15px;
+        &:last-child {
+          margin-right: 0;
+        }
+        .name {
+          height: 22px;
+          line-height: 22px;
+        }
+        .value-box {
+          display: flex;
+          .value-box-item {
+            margin-right: 20px;
+            .label {
+              color: #99999999;
+              line-height: 22px;
+            }
+            .value {
+              color: #ff3131;
+            }
+          }
+        }
       }
     }
-    
   }
-  .card-but{
-    position: absolute;
-    right: 20px;
-    top: 40%;
-  }
-  
 }
-
 </style>
diff --git a/admin-web/src/views/systemManger/server/user/edit.vue b/admin-web/src/views/systemManger/server/user/edit.vue
index b5646fc..840efc6 100644
--- a/admin-web/src/views/systemManger/server/user/edit.vue
+++ b/admin-web/src/views/systemManger/server/user/edit.vue
@@ -138,6 +138,7 @@
             // 鑾峰彇鎵�鏈夎鑹�
             getAllRole() {
               const user = this.$store.getters.userInfo
+              this.data_scope = 1
               if (user.lv == 1) {
                 this.data_scope = 1
               }

--
Gitblit v1.9.1