From e1045d3662405a95481d575ed1ae4cf9e3d9b1e7 Mon Sep 17 00:00:00 2001
From: llj <132905093+newwwwwwtree@users.noreply.github.com>
Date: 星期一, 17 十一月 2025 09:38:11 +0800
Subject: [PATCH] 物料,客户,分布式调入单,分布式调出单
---
src/permission.js | 2
src/views/component/BarCodeDetail/index.vue | 455 ++
src/views/component/CurrencyDialog/index.vue | 568 ++
src/views/FbStepFoldinBillList/EmployeeDialog.vue | 546 ++
src/views/FbStepFoldOutBillList/fbStepFoldOutBillList.vue | 727 +++
src/store/modules/permission.js | 48
src/views/gyMaterial/GyMaterialCorrection.vue | 913 ++++
src/views/component/AreaDialog/index.vue | 492 ++
src/router/index.js | 96
src/views/component/SettleStyleDialog/index.vue | 609 ++
src/views/GyCustomer/index.vue | 1217 +++++
src/views/gyMaterial/GyMaterial.vue | 1441 ++++++
src/views/component/CustomerTypeDialog/index.vue | 794 +++
src/views/FbStepFoldinBillList/SupplierDialog.vue | 594 ++
src/views/FbStepFoldinBillList/fbStepFoldinBillListEdit.vue | 1007 ++++
src/views/FbStepFoldinBillList/fbStepFoldinBillList.vue | 724 +++
src/views/GyCustomer/CustomerEdit/index.vue | 898 ++++
src/views/gyMaterial/edit/index.vue | 1179 +++++
src/views/FbStepFoldOutBillList/fbStepFoldOutBillListEdit.vue | 1007 ++++
19 files changed, 13,316 insertions(+), 1 deletions(-)
diff --git a/src/permission.js b/src/permission.js
index e5d5ec6..6fbbd96 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -10,7 +10,7 @@
NProgress.configure({ showSpinner: false })
const whiteList = [ '/login', '/register', '/printList',
- '/hBarPlanPrint', '/gySource', '/gyWarehouse', '/gyStockPlace', '/gyEmployee']
+ '/hBarPlanPrint', '/gySource', '/gyWarehouse', '/gyStockPlace', '/gyEmployee','/GyCustomer','gyMaterial','FbStepFoldinBillList','/FbStepFoldOutBillList' ] // no redirect whitelist
const isWhiteList = (path) => {
return whiteList.some(pattern => isPathMatch(pattern, path))
diff --git a/src/router/index.js b/src/router/index.js
index dfecdb5..45c7dcb 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -176,6 +176,102 @@
component: () => import("@/views/gyEmployee/index"),
hidden: true,
},
+ // 瀹㈡埛
+ {
+ path: "/GyCustomer",
+ component: () => import("@/views/GyCustomer/index"),
+ hidden: false,
+ },
+ {
+ path: "/basic/gy/gyCustomer",
+ component: Layout,
+ hidden: true,
+ redirect: "noredirect",
+ meta: {
+ breadcrumb: false, // 濡傛灉璁剧疆涓篺alse锛屽垯涓嶄細鍦╞readcrumb闈㈠寘灞戜腑鏄剧ず
+ activeMenu: "/basic/gy/gyCustomer", // 褰撹矾鐢辫缃簡璇ュ睘鎬э紝鍒欎細楂樹寒鐩稿搴旂殑渚ц竟鏍忋��
+ },
+ children: [
+ {
+ path: "/basic/gy/gyCustomer",
+ component: () => import("@/views/GyCustomer/index"),
+ name: "GyCustomer",
+ meta: { title: "瀹㈡埛鍒楄〃", activeMenu: "basic/gy" },
+ },
+ ],
+ },
+ // 鐗╂枡
+ {
+ path: "/gyMaterial",
+ component: () => import("@/views/gyMaterial/GyMaterial"),
+ hidden: false,
+ },
+ {
+ path: "/basic/gy/gyMaterial",
+ component: Layout,
+ hidden: true,
+ redirect: "noredirect",
+ meta: {
+ breadcrumb: false, // 濡傛灉璁剧疆涓篺alse锛屽垯涓嶄細鍦╞readcrumb闈㈠寘灞戜腑鏄剧ず
+ activeMenu: "/basic/gy/gyMaterial", // 褰撹矾鐢辫缃簡璇ュ睘鎬э紝鍒欎細楂樹寒鐩稿搴旂殑渚ц竟鏍忋��
+ },
+ children: [
+ {
+ path: "/basic/gy/gyMaterial",
+ component: () => import("@/views/gyMaterial/GyMaterial"),
+ name: "gyMaterial",
+ meta: { title: "鐗╂枡鍒楄〃", activeMenu: "basic/gy" },
+ },
+ ],
+ },
+ // 鍒嗗竷寮忚皟鍏ュ崟
+ {
+ path: "/FbStepFoldinBillList",
+ component: () => import("@/views/FbStepFoldinBillList/fbStepFoldinBillList"),
+ hidden: false,
+ },
+ {
+ path: "/basic/gy/FbStepFoldinBillList",
+ component: Layout,
+ hidden: true,
+ redirect: "noredirect",
+ meta: {
+ breadcrumb: false, // 濡傛灉璁剧疆涓篺alse锛屽垯涓嶄細鍦╞readcrumb闈㈠寘灞戜腑鏄剧ず
+ activeMenu: "/basic/gy/FbStepFoldinBillList", // 褰撹矾鐢辫缃簡璇ュ睘鎬э紝鍒欎細楂樹寒鐩稿搴旂殑渚ц竟鏍忋��
+ },
+ children: [
+ {
+ path: "/basic/gy/FbStepFoldinBillList",
+ component: () => import("@/views/FbStepFoldinBillList/fbStepFoldinBillList"),
+ name: "FbStepFoldinBillList",
+ meta: { title: "鍒嗗竷寮忚皟鍏ュ崟", activeMenu: "basic/gy" },
+ },
+ ],
+ },
+ //鍒嗗竷寮忚皟鍑哄崟fbStepFoldOutBillList
+ {
+ path: "/fbStepFoldOutBillList",
+ component: () => import("@/views/FbStepFoldOutBillList/fbStepFoldOutBillList"),
+ hidden: false,
+ },
+ {
+ path: "/basic/gy/FbStepFoldOutBillList",
+ component: Layout,
+ hidden: true,
+ redirect: "noredirect",
+ meta: {
+ breadcrumb: false, // 濡傛灉璁剧疆涓篺alse锛屽垯涓嶄細鍦╞readcrumb闈㈠寘灞戜腑鏄剧ず
+ activeMenu: "/basic/gy/FbStepFoldOutBillList", // 褰撹矾鐢辫缃簡璇ュ睘鎬э紝鍒欎細楂樹寒鐩稿搴旂殑渚ц竟鏍忋��
+ },
+ children: [
+ {
+ path: "/basic/gy/FbStepFoldOutBillList",
+ component: () => import("@/views/FbStepFoldOutBillList/fbStepFoldOutBillList"),
+ name: "FbStepFoldOutBillList",
+ meta: { title: "鍒嗗竷寮忚皟鍏ュ崟", activeMenu: "basic/gy" },
+ },
+ ],
+ },
];
// 鍔ㄦ�佽矾鐢憋紝鍩轰簬鐢ㄦ埛鏉冮檺鍔ㄦ�佸幓鍔犺浇
diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js
index ac7bf4d..3a409c9 100644
--- a/src/store/modules/permission.js
+++ b/src/store/modules/permission.js
@@ -140,6 +140,54 @@
// name: "GyWarehouse",
// path: "gyWarehouse",
// },
+ {
+ meta: {
+ icon: "build",
+ link: null,
+ noCache: false,
+ title: "瀹㈡埛鍒楄〃",
+ },
+ component: () => import('@/views/GyCustomer/index.vue'),
+ hidden: false,
+ name: "GyCustomer",
+ path: "gyCustomer",
+ },
+ {
+ meta: {
+ icon: "build",
+ link: null,
+ noCache: false,
+ title: "鐗╂枡鍒楄〃",
+ },
+ component: () => import('@/views/gyMaterial/GyMaterial.vue'),
+ hidden: false,
+ name: "gyMaterial",
+ path: "gyMaterial",
+ },
+ {
+ meta: {
+ icon: "build",
+ link: null,
+ noCache: false,
+ title: "鍒嗗竷寮忚皟鍏ュ崟",
+ },
+ component: () => import('@/views/FbStepFoldinBillList/fbStepFoldinBillList.vue'),
+ hidden: false,
+ name: "FbStepFoldinBillList",
+ path: "FbStepFoldinBillList",
+ },
+ {
+ meta: {
+ icon: "build",
+ link: null,
+ noCache: false,
+ title: "鍒嗗竷寮忚皟鍑哄崟",
+ },
+ component: () => import('@/views/FbStepFoldOutBillList/fbStepFoldOutBillList.vue'),
+ hidden: false,
+ name: "FbStepFoldOutBillList",
+ path: "FbStepFoldOutBillList",
+ },
],
},
],
diff --git a/src/views/FbStepFoldOutBillList/fbStepFoldOutBillList.vue b/src/views/FbStepFoldOutBillList/fbStepFoldOutBillList.vue
new file mode 100644
index 0000000..5c86466
--- /dev/null
+++ b/src/views/FbStepFoldOutBillList/fbStepFoldOutBillList.vue
@@ -0,0 +1,727 @@
+<template>
+ <div style="padding:12px">
+ <el-card>
+ <el-form :inline="true" :model="query" class="mb8" ref="queryForm">
+ <el-form-item label="鏃ユ湡闂撮殧">
+ <el-select v-model="query.HInitTimeCycle" placeholder="璇烽�夋嫨" style="width:160px" @change="onTimeCycleChange">
+ <el-option v-for="(t,i) in timeCycles" :key="i" :label="t.label" :value="t.value" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="寮�濮嬫棩鏈�">
+ <el-date-picker v-model="query.HBeginDate" type="date" placeholder="寮�濮嬫棩鏈�" style="width:160px" :disabled="timeCycleDisabled" />
+ </el-form-item>
+ <el-form-item label="缁撴潫鏃ユ湡">
+ <el-date-picker v-model="query.HEndDate" type="date" placeholder="缁撴潫鏃ユ湡" style="width:160px" :disabled="timeCycleDisabled" />
+ </el-form-item>
+ <el-form-item label="鍗曟嵁鍙�">
+ <el-input v-model="query.HBillNo" style="width:160px" />
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" @click="onSearch">鏌ヨ</el-button>
+ <el-button @click="onReset">閲嶇疆</el-button>
+ </el-form-item>
+ <el-form-item style="margin-left:12px">
+ <div v-if="currentFilterName" style="color:#fc9393;font-weight:600">褰撳墠杩囨护鏂规锛歿{ currentFilterName }}</div>
+ </el-form-item>
+ </el-form>
+
+ <el-form :model="query" ref="filterForm">
+ <el-collapse v-model="activeCollapse" class="filter-collapse">
+ <el-collapse-item title="鏇村" name="more">
+ <el-row :gutter="12">
+ <el-col :span="8">
+ <el-form-item label="閮ㄩ棬">
+ <el-input v-model="query.HDeptID" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡浠g爜">
+ <el-input v-model="query.MaterialCode" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡鍚嶇О">
+ <el-input v-model="query.MaterialName" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瑙勬牸鍨嬪彿">
+ <el-input v-model="query.SpecificationModel" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="婧愬崟鍗曞彿">
+ <el-input v-model="query.HSourceBillNo" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="浠撳簱">
+ <el-input v-model="query.Warehouse" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍒跺崟浜�">
+ <el-input v-model="query.Hmaker" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12" style="margin-top: 12px;">
+ <el-col :span="24">
+ <el-row :gutter="12" style="margin-bottom: 10px;">
+ <el-col :span="6">
+ <el-form-item label="杩囨护">
+ <el-select v-model="query.ColName" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option v-for="col in filterColumns" :key="col.field" :value="col.field" :label="col.title" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="query.Comparator" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="query.ColContent" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12" style="margin-bottom: 10px;">
+ <el-col :span="6">
+ <el-form-item label="杩囨护1">
+ <el-select v-model="query.ColName1" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option v-for="col in filterColumns" :key="col.field" :value="col.field" :label="col.title" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="query.Comparator1" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="query.ColContent1" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12">
+ <el-col :span="6">
+ <el-form-item label="杩囨护2">
+ <el-select v-model="query.ColName2" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option v-for="col in filterColumns" :key="col.field" :value="col.field" :label="col.title" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="query.Comparator2" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="query.ColContent2" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+ </el-col>
+ </el-row>
+ </el-collapse-item>
+ </el-collapse>
+ </el-form>
+
+ <el-row style="margin-bottom:8px">
+ <el-col>
+ <el-button size="mini" type="primary" @click="handleAdd">鏂板</el-button>
+ <el-button size="mini" @click="handleEdit">缂栬緫</el-button>
+ <el-button size="mini" type="danger" @click="set_DeleteBill">鍒犻櫎</el-button>
+ <el-button size="mini" @click="set_CheckBill(1)">瀹℃牳</el-button>
+ <el-button size="mini" @click="set_CheckBill(2)">鍙嶅鏍�</el-button>
+ <el-button size="mini" @click="set_CloseBill(1)">鍏抽棴</el-button>
+ <el-button size="mini" @click="set_CloseBill(2)">鍙嶅叧闂�</el-button>
+ <el-button size="mini" @click="set_DropBill(1)">浣滃簾</el-button>
+ <el-button size="mini" @click="set_DropBill(2)">鍙嶄綔搴�</el-button>
+ <el-button size="mini" @click="get_ViewReport">棰勮</el-button>
+ <el-button size="mini" @click="get_PrintReport">鎵撳嵃</el-button>
+ <el-button size="mini" @click="get_Refresh">鍒锋柊</el-button>
+ <el-button size="mini" @click="get_BarCodeDetail">鏉$爜鏄庣粏</el-button>
+ </el-col>
+ </el-row>
+
+ <el-table
+ :data="tableData"
+ stripe
+ border
+ style="width:100%"
+ @row-click="onRowClick"
+ @selection-change="onSelectionChange"
+ :loading="loading"
+ ref="mainTable"
+ >
+ <el-table-column type="selection" width="55" />
+ <el-table-column v-for="(col, idx) in tableColumns" :key="idx" :prop="col.field" :label="col.title" :width="col.width" :formatter="col.formatter">
+ <template v-if="col.field === '鍗曟嵁鍙�'" #default="scope">
+ <span style="color: blue; cursor: pointer;" @click="onBillNoClick(scope.row)">{{ scope.row.鍗曟嵁鍙� }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <el-pagination style="margin-top:12px" background layout="total, sizes, prev, pager, next, jumper" :total="total" :page-size.sync="pageSize" :current-page.sync="page" @current-change="pageChange" @size-change="sizeChange" :page-sizes="[50,500,5000,20000]" />
+ </el-card>
+
+ <FbStepFoldinBillEdit
+ :visible.sync="editDialogVisible"
+ :operation-type="operationType"
+ :linterid="currentId"
+ @saved="handleSaved"
+ @closed="handleClosed"
+ />
+ <BarCodeDetail
+ :visible.sync="barcodeDetailVisible"
+ ref="barcodeDetail"
+ />
+
+
+ </div>
+</template>
+
+<script>
+import axios from 'axios';
+//import FbStepFoldinBillEdit from './fbStepFoldinBillEdit'
+import FbStepFoldinBillEdit from '@/views/FbStepFoldOutBillList/fbStepFoldOutBillListEdit'
+import BarCodeDetail from '@/views/component/BarCodeDetail'
+
+
+export default {
+ name: 'FbStepFoldinBillList',
+ components: {
+ FbStepFoldinBillEdit,
+ BarCodeDetail
+
+ },
+ data() {
+ return {
+
+ editDialogVisible:false,
+ operationType:'1',
+ currentId : '',
+ barcodeDetailVisible: false,// 鏉$爜鏄庣粏寮圭獥鏄剧ず鎺у埗
+
+ query: {
+ HInitTimeCycle: 29,
+ HBeginDate: '',
+ HEndDate: '',
+ HBillNo: '',
+ HDeptID: '',
+ MaterialCode: '',
+ MaterialName: '',
+ SpecificationModel: '',
+ HSourceBillNo: '',
+ Warehouse: '',
+ Hmaker: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: '',
+ ColName1: '0',
+ Comparator1: '0',
+ ColContent1: '',
+ ColName2: '0',
+ Comparator2: '0',
+ ColContent2: ''
+ },
+ timeCycles: [
+ { value: -1, label: '浠绘剰闂撮殧' },
+ { value: 0, label: '浠婂ぉ' },
+ { value: 1, label: '杩戜袱澶�' },
+ { value: 2, label: '杩戜笁澶�' },
+ { value: 3, label: '杩戝洓澶�' },
+ { value: 4, label: '杩戜簲澶�' },
+ { value: 5, label: '杩戝叚澶�' },
+ { value: 6, label: '杩戜竷澶�' },
+ { value: 29, label: '杩�30澶�' },
+ { value: 180, label: '杩戝崐骞�' },
+ { value: 365, label: '杩戜竴骞�' }
+ ],
+ timeCycleDisabled: false,
+ tableColumns: [],
+ filterColumns: [],
+ tableData: [],
+ loading: false,
+ page: 1,
+ pageSize: 50,
+ total: 0,
+ selectedRows: [],
+ currentFilterName: '',
+ activeCollapse: [],
+ baseURL: process.env.VUE_APP_BASE_URL || "http://47.96.97.237/API/",
+ };
+ },
+ created() {
+ this.set_ClearBill();
+ },
+ methods: {
+ // 鍒濆鍖�
+ set_ClearBill() {
+ this.setSelect_HInitTimeCycle();
+ this.setDatesByCycle();
+ this.set_InitGrid();
+ this.ColFilter();
+ this.get_DefaultModule();
+ },
+ setSelect_HInitTimeCycle() {
+ this.query.HInitTimeCycle = 29;
+ },
+ setDatesByCycle() {
+ const end = new Date();
+ const start = new Date();
+ const cycle = this.query.HInitTimeCycle;
+
+ if (cycle === -1) {
+ // 浠绘剰闂撮殧锛屼笉娓呯┖鏃ユ湡
+ this.timeCycleDisabled = false;
+ return;
+ }
+
+ start.setDate(start.getDate() - (cycle >= 0 ? cycle : 0));
+ this.query.HBeginDate = this.formatDate(start);
+ this.query.HEndDate = this.formatDate(end);
+ this.timeCycleDisabled = this.query.HInitTimeCycle !== -1;
+ },
+ formatDate(d) {
+ if (!d) return '';
+ const yyyy = d.getFullYear();
+ const mm = String(d.getMonth() + 1).padStart(2, '0');
+ const dd = String(d.getDate()).padStart(2, '0');
+ return `${yyyy}-${mm}-${dd}`;
+ },
+ onTimeCycleChange() {
+ this.setDatesByCycle();
+ if (this.query.HInitTimeCycle !== -1) {
+ this.onSearch();
+ }
+ },
+ set_InitGrid() {
+ this.tableColumns = [];
+ this.tableData = [];
+ },
+ // 鏂板
+ handleAdd() {
+ this.operationType = '1'
+ this.currentId = ''
+ this.editDialogVisible = true
+ },
+ // 缂栬緫
+ handleEdit(row) {
+ let target = row;
+ console.log('浼犲叆鐨勮瀵硅薄:', target);
+ // 濡傛灉娌℃湁浼犲叆琛屽璞★紝鍒欎娇鐢ㄥ綋鍓嶉�変腑鐨勭涓�琛�
+ if (!target) {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹紒');
+ return;
+ }
+
+ }
+ target = this.selectedRows[0];
+ this.operationType = '3';
+ this.currentId = this.selectedRows[0].hmainid || target.HInterID || target.HItemID || '';
+ console.log('浼犲叆鐨勪富id:', this.currentId);
+ this.editDialogVisible = true;
+ },
+
+ // 淇濆瓨鎴愬姛鍥炶皟
+ handleSaved() {
+ this.get_Display('');
+ this.$message.success('鎿嶄綔鎴愬姛')
+ },
+ handleClosed() {
+ this.editDialogVisible = false,
+ this.currentId = ''
+ },
+ onSearch() {
+ const sWhereParts = [];
+ const q = this.query;
+
+ const buildComparator = (col, cmp, content) => {
+ if (!col || !cmp || cmp === '0' || !content) return '';
+ let com = '';
+ switch (cmp) {
+ case '7': com = `like '%${content}%'`; break;
+ case '8': com = `like '%${content}'`; break;
+ case '9': com = `like '${content}%'`; break;
+ case '10': com = `not like '%${content}%'`; break;
+ default: com = `${cmp} '${content}'`; break;
+ }
+ return ` and ${col} ${com}`;
+ };
+
+ if (q.ColName && q.Comparator && q.Comparator !== '0' && q.ColContent)
+ sWhereParts.push(buildComparator(q.ColName, q.Comparator, q.ColContent));
+ if (q.ColName1 && q.Comparator1 && q.Comparator1 !== '0' && q.ColContent1)
+ sWhereParts.push(buildComparator(q.ColName1, q.Comparator1, q.ColContent1));
+ if (q.ColName2 && q.Comparator2 && q.Comparator2 !== '0' && q.ColContent2)
+ sWhereParts.push(buildComparator(q.ColName2, q.Comparator2, q.ColContent2));
+
+ if (q.HBeginDate) sWhereParts.push(` and CONVERT(varchar(100),鏃ユ湡, 23) >= '${q.HBeginDate}'`);
+ if (q.HEndDate) sWhereParts.push(` and CONVERT(varchar(100),鏃ユ湡, 23) <= '${q.HEndDate}'`);
+ if (q.HBillNo) sWhereParts.push(` and 鍗曟嵁鍙� like '%${q.HBillNo}%'`);
+ if (q.HDeptID) sWhereParts.push(` and 閮ㄩ棬 like '%${q.HDeptID}%'`);
+ if (q.MaterialCode) sWhereParts.push(` and 鐗╂枡浠g爜 like '%${q.MaterialCode}%'`);
+ if (q.MaterialName) sWhereParts.push(` and 鐗╂枡鍚嶇О like '%${q.MaterialName}%'`);
+ if (q.SpecificationModel) sWhereParts.push(` and 瑙勬牸鍨嬪彿 like '%${q.SpecificationModel}%'`);
+ if (q.HSourceBillNo) sWhereParts.push(` and 婧愬崟鍗曞彿 like '%${q.HSourceBillNo}%'`);
+ if (q.Warehouse) sWhereParts.push(` and 浠撳簱鍚嶇О like '%${q.Warehouse}%'`);
+ if (q.Hmaker) sWhereParts.push(` and 鍒跺崟浜� like '%${q.Hmaker}%'`);
+
+ const sWhere = sWhereParts.join('');
+ this.get_Display(sWhere);
+ },
+ onReset() {
+ this.query = {
+ HInitTimeCycle: 29,
+ HBeginDate: '',
+ HEndDate: '',
+ HBillNo: '',
+ HDeptID: '',
+ MaterialCode: '',
+ MaterialName: '',
+ SpecificationModel: '',
+ HSourceBillNo: '',
+ Warehouse: '',
+ Hmaker: '',
+ ColName: '0', Comparator: '0', ColContent: '',
+ ColName1: '0', Comparator1: '0', ColContent1: '',
+ ColName2: '0', Comparator2: '0', ColContent2: ''
+ };
+ this.setDatesByCycle();
+ this.get_Display('');
+ },
+ async get_Display(sWhere) {
+ this.loading = true;
+ try {
+ const userName = sessionStorage['HUserName'] || sessionStorage['Czybm'] || 'admin';
+ const orgName = sessionStorage['OrganizationName'] || sessionStorage['Organization'] || '娴欐睙鏅轰簯杩堟��';
+
+ const url = `${this.baseURL}/Kf_StepFoldOutBill/GetStepFoldOutBillList`;
+ const params = {
+ sWhere: sWhere || '',
+ user: userName,
+ //Organization: orgName
+ };
+
+ const resp = await axios.get(url, { params });
+ const data1 = resp.data;
+
+ if (data1.count === 1) {
+ const colDefs = [];
+ const filterCols = [];
+
+ for (let i = 0; i < data1.list.length; i++) {
+ const item = data1.list[i];
+ const name = item.ColmCols;
+ const type = item.ColmType;
+
+ const colDef = {
+ field: name,
+ title: name,
+ width: 200
+ };
+
+ if (type === 'DateTime') {
+ colDef.formatter = (row, col, cellValue) => this.formatDateTime(cellValue);
+ }
+
+ colDefs.push(colDef);
+
+ // 涓鸿繃婊ゆ潯浠跺噯澶囧垪閫夐」锛堟帓闄ら殣钘忓瓧娈碉級
+ const hideFields = ['hmainid', 'HMaterID', 'HUnitID', 'HICMOEmpID', 'HWHID', '鍗曟嵁ID', '鍗曟嵁绫诲瀷', 'HDeptID', '閮ㄩ棬浠g爜', 'Hunitid',
+ '璁¢噺鍗曚綅浠g爜', '璋冨叆浠撳簱浠g爜', 'HSPID', '璋冨叆浠撲綅浠g爜', 'HSCWHID', '璋冨嚭浠撲綅浠g爜', '璋冨嚭浠撳簱浠g爜', 'HSCSPID', 'HSecManagerID', 'HKeeperID'];
+
+ if (!hideFields.includes(name)) {
+ filterCols.push(colDef);
+ }
+ }
+
+ this.tableColumns = colDefs;
+ this.filterColumns = filterCols;
+ this.tableData = data1.data || [];
+ this.total = data1.count || this.tableData.length;
+ } else {
+ this.$alert((data1.Message || '鑾峰彇鏁版嵁寮傚父'), '閿欒');
+ }
+ } catch (err) {
+ console.error('璇锋眰澶辫触:', err);
+ this.$message.error(`鎺ュ彛璇锋眰澶辫触: ${err.message}`);
+ } finally {
+ this.loading = false;
+ }
+ },
+ formatDateTime(value) {
+ if (!value) return '';
+ try {
+ const d = new Date(value);
+ return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0') + ' ' + String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0') + ':' + String(d.getSeconds()).padStart(2, '0');
+ } catch (e) {
+ return value;
+ }
+ },
+ ColFilter() {
+ },
+ async get_DefaultModule() {
+ try {
+ const url = `${this.baseURL}/Xt_FastICScheme/Chooselist`;
+ const params = {
+ user: sessionStorage['Czybm'] || sessionStorage['HUserName'] || '',
+ HModuleName: '鍒嗘寮忚皟鍑哄崟缁存姢',
+ HInterID: 0,
+ Type: 'Default'
+ };
+ const resp = await axios.get(url, { params });
+ if (resp.data.count == 1) {
+ const data = resp.data.data;
+ this.currentFilterName = data[0].鏂规鍚嶇О || '';
+ this.onSearch();
+ } else {
+ this.currentFilterName = '';
+ this.onSearch();
+ }
+ } catch (err) {
+ console.warn('鑾峰彇榛樿杩囨护鏂规澶辫触', err);
+ this.onSearch();
+ }
+ },
+ set_AddNew() {
+ window.open('./Fb_StepFoldinBillEdit.html?OperationType=1&linterid=&HSouceBillType=0&closeType=1', '_blank');
+ },
+ set_ShowBill() {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹紪杈戯紒');
+ return;
+ }
+ const id = this.selectedRows[0].hmainid || this.selectedRows[0].HItemID;
+ window.open('./Fb_StepFoldinBillEdit.html?OperationType=3&linterid=' + id, '_blank');
+ },
+ async set_DeleteBill() {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹垹闄わ紒');
+ return;
+ }
+ const row = this.selectedRows[0];
+ if (row.鐘舵�� && row.鐘舵�� !== '鍒涘缓') {
+ this.$message.warning('姝ゆ暟鎹笉鏄垱寤虹姸鎬�,鏃犳硶鍒犻櫎锛�');
+ return;
+ }
+
+ try {
+ await this.$confirm('纭瑕佸垹闄ゅ悧锛屽垹闄ゅ悗涓嶈兘鎭㈠', '鍒犻櫎纭');
+ const url = `${this.baseURL}/Fb_StepFoldInBill/DeltetFb_StepFoldInBill`;
+ const params = { HInterID: (row.hmainid || row.HInterID) };
+ const resp = await axios.get(url, { params });
+
+ if (resp.data.count == 1) {
+ this.$message.success(resp.data.Message || '鍒犻櫎鎴愬姛');
+ this.onSearch();
+ } else {
+ this.$alert((resp.data.Message || '鍒犻櫎澶辫触'), '閿欒');
+ }
+ } catch (err) {
+ if (err !== 'cancel') {
+ this.$message.error('鎺ュ彛璇锋眰澶辫触');
+ }
+ }
+ },
+ // 瀹℃牳/鍙嶅鏍稿姛鑳�
+ async set_CheckBill(type) {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹搷浣滐紒');
+ return;
+ }
+
+ const row = this.selectedRows[0];
+ const actionName = type === 1 ? '瀹℃牳' : '鍙嶅鏍�';
+
+ try {
+ await this.$confirm(`纭瑕�${actionName}姝ゅ崟鎹悧锛焋, `${actionName}纭`);
+
+ const url = `${this.baseURL}/Kf_StepFoldOutBill/AuditKf_StepFoldOutBill`;
+ const params = {
+ HInterID: (row.hmainid || row.HInterID),
+ Type: type,
+ user: sessionStorage['HUserName'] || ''
+ };
+
+ const resp = await axios.get(url, { params });
+ if (resp.data.count == 1) {
+ this.$message.success(resp.data.Message || `${actionName}鎴愬姛`);
+ this.onSearch();
+ } else {
+ this.$alert((resp.data.Message || `${actionName}澶辫触`), '閿欒');
+ }
+ } catch (err) {
+ if (err !== 'cancel') {
+ this.$message.error('鎺ュ彛璇锋眰澶辫触');
+ }
+ }
+ },
+ // 鍏抽棴/鍙嶅叧闂姛鑳�
+ async set_CloseBill(type) {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹搷浣滐紒');
+ return;
+ }
+
+ const row = this.selectedRows[0];
+ const actionName = type === 1 ? '鍏抽棴' : '鍙嶅叧闂�';
+
+ try {
+ await this.$confirm(`纭瑕�${actionName}姝ゅ崟鎹悧锛焋, `${actionName}纭`);
+
+ const url = `${this.baseURL}/Kf_StepFoldOutBill/CloseKf_StepFoldOutBill`;
+ const params = {
+ HInterID: (row.hmainid || row.HInterID),
+ Type: type,
+ user: sessionStorage['HUserName'] || ''
+ };
+
+ const resp = await axios.get(url, { params });
+ if (resp.data.count == 1) {
+ this.$message.success(resp.data.Message || `${actionName}鎴愬姛`);
+ this.onSearch();
+ } else {
+ this.$alert((resp.data.Message || `${actionName}澶辫触`), '閿欒');
+ }
+ } catch (err) {
+ if (err !== 'cancel') {
+ this.$message.error('鎺ュ彛璇锋眰澶辫触');
+ }
+ }
+ },
+ // 浣滃簾/鍙嶄綔搴熷姛鑳�
+ async set_DropBill(type) {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹搷浣滐紒');
+ return;
+ }
+
+ const row = this.selectedRows[0];
+ const actionName = type === 1 ? '浣滃簾' : '鍙嶄綔搴�';
+
+ try {
+ await this.$confirm(`纭瑕�${actionName}姝ゅ崟鎹悧锛焋, `${actionName}纭`);
+
+ const url = `${this.baseURL}/Kf_StepFoldOutBill/CancellKf_StepFoldOutBill`;
+ const params = {
+ HInterID: (row.hmainid || row.HInterID),
+ Type: type,
+ user: sessionStorage['HUserName'] || ''
+ };
+
+ const resp = await axios.get(url, { params });
+ if (resp.data.count == 1) {
+ this.$message.success(resp.data.Message || `${actionName}鎴愬姛`);
+ this.onSearch();
+ } else {
+ this.$alert((resp.data.Message || `${actionName}澶辫触`), '閿欒');
+ }
+ } catch (err) {
+ if (err !== 'cancel') {
+ this.$message.error('鎺ュ彛璇锋眰澶辫触');
+ }
+ }
+ },
+ onRowClick(row) {
+ this.$nextTick(() => {
+ const table = this.$refs.mainTable;
+ if (!table) return;
+ table.toggleRowSelection(row);
+ });
+ },
+ onSelectionChange(selection) {
+ this.selectedRows = selection;
+ },
+ onBillNoClick(row) {
+ const id = row.hmainid || row.HInterID;
+ window.open('./Fb_StepFoldinBillEdit.html?OperationType=3&linterid=' + id, '_blank');
+ },
+ get_BarCodeDetail() {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹煡鐪嬫潯鐮佹槑缁嗭紒')
+ return
+ }
+ this.barcodeDetailVisible = true
+ this.$nextTick(() => {
+ this.$refs.barcodeDetail.open(this.selectedRows[0])
+ })
+ },
+ get_ViewReport() {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹墦鍗帮紒');
+ return;
+ }
+ const id = this.selectedRows[0].hmainid;
+ window.open('../../BaseSet/SRM_OpenTmpList.html?linterid=' + id + '&MyMsg=' + id + '&Type=HMouldProdOutBill', '_blank');
+ },
+ get_PrintReport() {
+ if (this.selectedRows.length === 0) {
+ this.$message.warning('璇烽�夋嫨鏁版嵁鎵撳嵃锛�');
+ return;
+ }
+ const hmainid = this.selectedRows.map(r => (r.hmainid * (10 ** 8)) + (r.hsubid || 0)).toString();
+ window.open('../../BaseSet/SRM_OpenTmpList.html?linterid=' + hmainid + '&MyMsg=' + hmainid + '&Type=HSeOutStockBillList', '_blank');
+ },
+ get_Refresh() {
+ this.onReset();
+ },
+ pageChange(val) {
+ this.page = val;
+ this.onSearch();
+ },
+ sizeChange(val) {
+ this.pageSize = val;
+ this.onSearch();
+ }
+ }
+};
+</script>
+
+<style scoped>
+ .mb8 { margin-bottom: 8px }
+ .filter-collapse {
+ margin-bottom: 12px;
+ }
+ :deep(.el-collapse-item__header) {
+ font-weight: bold;
+ background-color: #f5f7fa;
+ padding: 0 12px;
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/FbStepFoldOutBillList/fbStepFoldOutBillListEdit.vue b/src/views/FbStepFoldOutBillList/fbStepFoldOutBillListEdit.vue
new file mode 100644
index 0000000..9d5d3cc
--- /dev/null
+++ b/src/views/FbStepFoldOutBillList/fbStepFoldOutBillListEdit.vue
@@ -0,0 +1,1007 @@
+<template>
+ <div class="app-container">
+ <el-dialog
+ :title="dialogTitle"
+ :visible.sync="dialogVisible"
+ :close-on-click-modal="false"
+ width="90%"
+ top="5vh"
+ @close="handleClose"
+ >
+ <!-- 琛ㄥ崟鍐呭 -->
+ <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+ <el-tabs v-model="activeTab">
+ <!-- 鍩烘湰淇℃伅鏍囩椤� -->
+ <el-tab-pane label="鍩烘湰淇℃伅" name="basic">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍗曟嵁鍙�" prop="HBillNo">
+ <el-input v-model="form.HBillNo" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏃ユ湡" prop="HDate">
+ <el-date-picker
+ v-model="form.HDate"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ style="width: 100%"
+ value-format="yyyy-MM-dd"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="婧愬崟绫诲瀷" prop="HSourceBillType">
+ <el-select v-model="form.HSourceBillType" placeholder="璇烽�夋嫨婧愬崟绫诲瀷" style="width: 100%">
+ <el-option
+ v-for="item in sourceBillTypes"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <!-- <el-col :span="8">
+ <el-form-item label="閫夊崟鍙�">
+ <el-input v-model="form.sourceBillNo" placeholder="閫夊崟鍙�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectSourceBill">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col> -->
+ <el-col :span="8">
+ <el-form-item label="渚涘簲鍟�" prop="supplier">
+ <el-input v-model="form.HSupName" placeholder="渚涘簲鍟�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="showSupplierDialog">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="浠撶鍛�">
+ <el-input v-model="form.HEmpName" placeholder="浠撶鍛�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="showEmployeeDialog('Employee')">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="璐熻矗浜�">
+ <el-input v-model="form.HManagerName" placeholder="璐熻矗浜�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="showEmployeeDialog('manager')">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璋冨叆浠撳簱" prop="HWHID">
+ <el-input v-model="form.HWHName" placeholder="璋冨叆浠撳簱" readonly style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectInWarehouse">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璋冨嚭浠撳簱" prop="HSCWHID">
+ <el-input v-model="form.HSCWHName" placeholder="璋冨嚭浠撳簱" readonly style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectOutWarehouse">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="楠屾敹">
+ <el-input v-model="form.HSecManagerName" placeholder="楠屾敹" style="width: calc(100% - 50px)" />
+ <el-button type="primary" icon="el-icon-search" @click="showEmployeeDialog('inspector')">
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="淇濈鍛�">
+ <el-input v-model="form.HKeeperName" placeholder="淇濈鍛�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" icon="el-icon-search" @click="showEmployeeDialog('keeper')">
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="閮ㄩ棬" prop="HDeptID">
+ <el-input v-model="form.HDeptName" placeholder="閮ㄩ棬" readonly style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectDept">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <!-- <el-col :span="8">
+ <el-form-item label="椤圭洰浠g爜">
+ <el-input v-model="form.HProNumber" placeholder="椤圭洰浠g爜" readonly style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectProject">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col> -->
+ <!-- <el-col :span="8">
+ <el-form-item label="椤圭洰鍚嶇О">
+ <el-input v-model="form.HProName" placeholder="椤圭洰鍚嶇О" readonly />
+ </el-form-item>
+ </el-col> -->
+ <el-col :span="8">
+ <el-form-item label="澶囨敞">
+ <el-input v-model="form.HRemark" placeholder="澶囨敞" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 琛ㄦ牸閮ㄥ垎 -->
+ <div class="table-section">
+ <div class="table-toolbar">
+ <el-button size="mini" @click="handleAddLine">澧炲姞涓�琛�</el-button>
+ <el-button size="mini" @click="handleCopyLine">澶嶅埗涓�琛�</el-button>
+ <el-button size="mini" @click="handleInventoryQuery">搴撳瓨鏌ヨ</el-button>
+ <el-button size="mini" @click="handleInOutQuery">鍑哄叆搴撹褰曟煡璇�</el-button>
+ </div>
+
+ <el-table
+ :data="tableData"
+ border
+ style="width: 100%"
+ height="400"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55" />
+ <el-table-column type="index" label="搴忓彿" width="60" />
+ <el-table-column prop="鐗╂枡浠g爜" label="鐗╂枡浠g爜" width="150">
+ <template slot-scope="scope">
+ <el-input
+ v-model="scope.row.鐗╂枡浠g爜"
+ placeholder="鐗╂枡浠g爜"
+ @focus="handleMaterialFocus(scope.$index, scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="鐗╂枡鍚嶇О" label="鐗╂枡鍚嶇О" width="150" />
+ <el-table-column prop="瑙勬牸鍨嬪彿" label="瑙勬牸鍨嬪彿" width="100" />
+ <el-table-column prop="璁¢噺鍗曚綅" label="璁¢噺鍗曚綅" width="100">
+ <template slot-scope="scope">
+ <el-input
+ v-model="scope.row.璁¢噺鍗曚綅"
+ placeholder="璁¢噺鍗曚綅"
+ @focus="handleUnitFocus(scope.$index, scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HQtyMust" label="搴旀敹鏁伴噺" width="100">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.HQtyMust"
+ :min="0"
+ :precision="2"
+ controls-position="right"
+ style="width: 100%"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HQty" label="瀹炴敹鏁伴噺" width="100">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.HQty"
+ :min="0"
+ :precision="2"
+ controls-position="right"
+ style="width: 100%"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HPrice" label="鍗曚环" width="100">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.HPrice"
+ :min="0"
+ :precision="2"
+ controls-position="right"
+ style="width: 100%"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HMoney" label="閲戦" width="100">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.HMoney"
+ :min="0"
+ :precision="2"
+ controls-position="right"
+ style="width: 100%"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="璋冨叆浠撳簱" label="璋冨叆浠撳簱" width="150">
+ <template slot-scope="scope">
+ <el-input
+ v-model="scope.row.璋冨叆浠撳簱"
+ placeholder="璋冨叆浠撳簱"
+ readonly
+ @focus="handleInWarehouseFocus(scope.$index, scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="璋冨嚭浠撳簱" label="璋冨嚭浠撳簱" width="100">
+ <template slot-scope="scope">
+ <el-input
+ v-model="scope.row.璋冨嚭浠撳簱"
+ placeholder="璋冨嚭浠撳簱"
+ readonly
+ @focus="handleOutWarehouseFocus(scope.$index, scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HBatchNo" label="鎵规" width="100">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.HBatchNo" placeholder="鎵规" />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HRemark" label="澶囨敞" width="100">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.HRemark" placeholder="澶囨敞" />
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="70" fixed="right">
+ <template slot-scope="scope">
+ <el-button size="mini" type="danger" @click="handleDeleteLine(scope.$index)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </el-tab-pane>
+
+ <!-- 鍒跺崟淇℃伅鏍囩椤� -->
+ <el-tab-pane label="鍒跺崟淇℃伅" name="maker">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍒跺崟浜�">
+ <el-input v-model="form.HMaker" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瀹℃牳浜�">
+ <el-input v-model="form.HChecker" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍏抽棴浜�">
+ <el-input v-model="form.HCloseMan" readonly />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="淇敼浜�">
+ <el-input v-model="form.HUpDater" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="浣滃簾浜�">
+ <el-input v-model="form.HDeleteMan" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍒跺崟鏃ユ湡">
+ <el-input v-model="form.HMakeDate" readonly />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="瀹℃牳鏃ユ湡">
+ <el-input v-model="form.HCheckDate" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍏抽棴鏃ユ湡">
+ <el-input v-model="form.HCloseDate" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="淇敼鏃ユ湡">
+ <el-input v-model="form.HUpDateDate" readonly />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="浣滃簾鏃ユ湡">
+ <el-input v-model="form.HDeleteDate" readonly />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-tab-pane>
+ </el-tabs>
+ </el-form>
+
+ <!-- 搴曢儴鎸夐挳 -->
+ <div slot="footer" class="dialog-footer">
+ <el-button type="primary" @click="handleSave">淇濆瓨</el-button>
+ <el-button @click="handleClose">閫�鍑�</el-button>
+ </div>
+ </el-dialog>
+
+ <!-- 閮ㄩ棬閫夋嫨瀵硅瘽妗� -->
+ <el-dialog
+ title="閫夋嫨閮ㄩ棬"
+ :visible.sync="deptVisible"
+ width="80%"
+ top="5vh"
+ @close="deptVisible = false"
+ >
+ <dept
+ ref="deptDialog"
+ @deptEmit="handleDeptSelect"
+ @deptEmitDb="handleDeptSelectDb"
+ />
+ </el-dialog>
+
+ <!-- 浠撳簱閫夋嫨瀵硅瘽妗� -->
+ <el-dialog
+ :visible.sync="warehouseVisible"
+ width="80%"
+ top="5vh"
+ @close="warehouseVisible = false"
+ >
+ <warehouse
+ ref="warehouseDialog"
+ :warehouse-type="warehouseType"
+ @deptEmit="handleWarehouseSelect"
+ @deptEmitDb="handleWarehouseSelectDb"
+ />
+ </el-dialog>
+
+ <!-- 渚涘簲鍟嗗脊绐� -->
+ <SupplierDialog
+ :visible.sync="supplierDialogVisible"
+ :dialog-type="currentDialogType"
+ @select="handleSupplierSelect"
+ />
+
+ <!-- 鑱屽憳寮圭獥 -->
+ <EmployeeDialog
+ :visible.sync="employeeDialogVisible"
+ :dialog-type="currentDialogType"
+ :dialog-title="employeeDialogTitle"
+ @select="handleEmployeeSelect"
+ />
+ </div>
+</template>
+
+<script>
+import Dept from '@/views/component/dept'
+import Warehouse from '@/views/component/warehouse'
+import axios from 'axios'
+import SupplierDialog from '@/views/FbStepFoldinBillList/SupplierDialog'
+import EmployeeDialog from '@/views/FbStepFoldinBillList/EmployeeDialog'
+export default {
+ name: 'FbStepFoldOutBillEdit',
+ components: {
+ Dept,
+ Warehouse,
+ SupplierDialog,
+ EmployeeDialog
+ },
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ operationType: {
+ type: String,
+ default: '1' // 1:鏂板, 3:缂栬緫
+ },
+ linterid: {
+ type: [String, Number],
+ default: ''
+ }
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ activeTab: 'basic',
+ deptVisible: false,
+ warehouseVisible: false,
+ warehouseType: '',
+ currentRowIndex: null,
+ currentField: '',
+ sourceBillTypes: [
+ { value: '1250', label: '鍒嗘寮忚皟鍑哄崟' }
+ ],
+ supplierDialogVisible: false,
+ employeeDialogVisible: false,
+ currentDialogType: '',
+ employeeDialogTitle: '閫夋嫨鑱屽憳',
+ form: {
+ HInterID: 0,
+ HBillNo: '',
+ HDate: '',
+ HSourceBillType: '',
+ sourceBillNo: '',
+ HSupName: '',
+ HSupID: 0,
+ HEmpName: '',
+ HEmpID: 0,
+ HManagerName: '',
+ HManagerID: 0,
+ HWHName: '',
+ HWHID: 0,
+ HSCWHName: '',
+ HSCWHID: 0,
+ HSecManagerName: '',
+ HSecManagerID: 0,
+ HKeeperName: '',
+ HKeeperID: 0,
+ HDeptName: '',
+ HDeptID: 0,
+ HProNumber: '',
+ HProName: '',
+ HProjectID: 0,
+ HRemark: '',
+ HMaker: '',
+ HChecker: '',
+ HCloseMan: '',
+ HUpDater: '',
+ HDeleteMan: '',
+ HMakeDate: '',
+ HCheckDate: '',
+ HCloseDate: '',
+ HUpDateDate: '',
+ HDeleteDate: '',
+ supplierId: '',
+ keeperId: '',
+ keeperName: '',
+ inspectorId: '',
+ inspectorName: '',
+ managerId: '',
+ managerName: ''
+ },
+ rules: {
+ HWHID: [{ required: true, message: '璇烽�夋嫨璋冨叆浠撳簱', trigger: 'change' }],
+ HSCWHID: [{ required: true, message: '璇烽�夋嫨璋冨嚭浠撳簱', trigger: 'change' }],
+ HDeptID: [{ required: true, message: '璇烽�夋嫨閮ㄩ棬', trigger: 'change' }]
+ },
+ tableData: [
+ {
+ HMaterID: 0,
+ 鐗╂枡浠g爜: '',
+ 鐗╂枡鍚嶇О: '',
+ 瑙勬牸鍨嬪彿: '',
+ HUnitID: 0,
+ 璁¢噺鍗曚綅: '',
+ HSecUnitRate: '0',
+ HSecUnitID: '0',
+ 杈呭姪璁¢噺鍗曚綅: '',
+ HQtyMust: 0,
+ HQty: 0,
+ HPrice: 0,
+ HMoney: 0,
+ HOrderPrice: 0,
+ HWHID: 0,
+ 璋冨叆浠撳簱: '',
+ HSCWHID: 0,
+ 璋冨嚭浠撳簱: '',
+ HBatchNo: '',
+ HRemark: ''
+ }
+ ],
+ selectedRows: [],
+ baseURL: process.env.VUE_APP_BASE_URL || 'http://47.96.97.237/API/'
+ }
+ },
+ computed: {
+ dialogTitle() {
+ return this.operationType === '1' ? '鏂板鍒嗘寮忚皟鍏ュ崟' : '缂栬緫鍒嗘寮忚皟鍏ュ崟'
+ }
+ },
+ watch: {
+ visible: {
+ immediate: true,
+ handler(val) {
+ this.dialogVisible = val
+ if (val) {
+ this.initForm()
+ }
+ }
+ }
+ },
+ methods: {
+ // 鍒濆鍖栬〃鍗�
+ initForm() {
+ console.log('褰撳墠鎿嶄綔绫诲瀷:', this.operationType)
+ if (this.operationType === '1') {
+ // 鏂板
+ this.resetForm()
+ this.getMaxBillNo()
+ this.form.HMaker = sessionStorage['HUserName'] || 'admin'
+ this.form.HMakeDate = this.formatDate(new Date())
+ this.form.HDate = this.formatDate(new Date())
+ } else if (this.operationType === '3' ) {
+ console.log('缂栬緫妯″紡锛屾棤涓籭d',this.linterid)
+ // 缂栬緫
+ this.loadBillData(this.linterid)
+ }
+ },
+
+ // 閲嶇疆琛ㄥ崟
+ resetForm() {
+ this.form = {
+ HInterID: 0,
+ HBillNo: '',
+ HDate: '',
+ HSourceBillType: '',
+ sourceBillNo: '',
+ HSupName: '',
+ HSupID: 0,
+ HEmpName: '',
+ HEmpID: 0,
+ HManagerName: '',
+ HManagerID: 0,
+ HWHName: '',
+ HWHID: 0,
+ HSCWHName: '',
+ HSCWHID: 0,
+ HSecManagerName: '',
+ HSecManagerID: 0,
+ HKeeperName: '',
+ HKeeperID: 0,
+ HDeptName: '',
+ HDeptID: 0,
+ HProNumber: '',
+ HProName: '',
+ HProjectID: 0,
+ HRemark: '',
+ HMaker: '',
+ HChecker: '',
+ HCloseMan: '',
+ HUpDater: '',
+ HDeleteMan: '',
+ HMakeDate: '',
+ HCheckDate: '',
+ HCloseDate: '',
+ HUpDateDate: '',
+ HDeleteDate: ''
+ }
+ this.tableData = [{
+ HMaterID: 0,
+ 鐗╂枡浠g爜: '',
+ 鐗╂枡鍚嶇О: '',
+ 瑙勬牸鍨嬪彿: '',
+ HUnitID: 0,
+ 璁¢噺鍗曚綅: '',
+ HSecUnitRate: '0',
+ HSecUnitID: '0',
+ 杈呭姪璁¢噺鍗曚綅: '',
+ HQtyMust: 0,
+ HQty: 0,
+ HPrice: 0,
+ HMoney: 0,
+ HOrderPrice: 0,
+ HWHID: 0,
+ 璋冨叆浠撳簱: '',
+ HSCWHID: 0,
+ 璋冨嚭浠撳簱: '',
+ HBatchNo: '',
+ HRemark: ''
+ }]
+ },
+
+ // 鑾峰彇鏈�澶у崟鎹彿
+ async getMaxBillNo() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Web/GetMAXNum`, {
+ params: { HBillType: '1251' }
+ })
+ if (response.data && response.data.data && response.data.data.length > 0) {
+ this.form.HBillNo = response.data.data[0].HBillNo
+ this.form.HInterID = response.data.data[0].HInterID
+ }
+ } catch (error) {
+ console.error('鑾峰彇鍗曟嵁鍙峰け璐�:', error)
+ this.$message.error('鑾峰彇鍗曟嵁鍙峰け璐�')
+ }
+ },
+
+ // 鍔犺浇鍗曟嵁鏁版嵁
+ async loadBillData(linterid) {
+ try {
+ const response = await axios.get(`${this.baseURL}/Kf_StepFoldOutBill/cx`, {
+ params: { HInterID: linterid }
+ })
+ console.log('缂栬緫浼犲叆鐨勪富id:', linterid)
+ console.log('鍔犺浇鐨勫崟鎹暟鎹�:', response.data)
+ if (response.data.code == 1) {
+ const data = response.data.data[0]
+ console.log('鍗曟嵁澶存暟鎹�:', data)
+ Object.keys(this.form).forEach(key => {
+ if (data[key] !== undefined) {
+ this.form[key] = data[key]
+ }
+ })
+ this.form.HInterID = linterid;
+ this.HInterID=data.HInterID;
+ this.form.HBillNo = data.鍗曟嵁鍙�
+ this.form.HDate = data.鏃ユ湡
+ this.form.HSourceBillType = '鍒嗗竷寮忚皟鍑哄崟'
+ this.form.sourceBillNo = data.婧愬崟鍙�
+ this.form.HSupName = data.渚涘簲鍟�
+ this.form.HSupID = data.HSupID
+ this.form.HEmpName = data.浠撶鍛�
+ this.form.HEmpID = data.HEmpID
+ this.form.HManagerName = data.璐熻矗浜�
+ this.form.HManagerID = data.HManagerID
+ this.form.HWHName = data.璋冨叆浠撳簱
+ this.form.HWHID = data.HWHID
+ this.form.HSCWHName = data.璋冨嚭浠撳簱
+ this.form.HSCWHID = data.HSCWHID
+ this.form.HSecManagerName = data.楠屾敹
+ this.form.HSecManagerID = data.HSecManagerID
+ this.form.HKeeperName = data.淇濈鍛�
+ this.form.HKeeperID = data.HKeeperID
+ this.form.HDeptName = data.閮ㄩ棬
+ this.form.HDeptID = data.HDeptID
+ this.form.HProNumber = data.椤圭洰浠g爜
+ this.form.HProName = data.椤圭洰鍚嶇О
+ this.form.HProjectID = data.HProjectID
+ this.form.HRemark = data.澶囨敞
+ this.form.HMaker = data.鍒跺崟浜�
+ this.form.HChecker = data.瀹℃牳浜�
+ this.form.HCloseMan = data.鍏抽棴浜�
+ this.form.HUpDater = data.淇敼浜�
+ this.form.HDeleteMan = data.浣滃簾浜�
+ this.form.HMakeDate = data.鍒跺崟鏃ユ湡
+ this.form.HCheckDate = data.瀹℃牳鏃ユ湡
+ this.form.HCloseDate = data.鍏抽棴鏃ユ湡
+ this.form.HUpDateDate = data.淇敼鏃ユ湡
+ this.form.HDeleteDate = data.浣滃簾鏃ユ湡
+
+
+ if (response.data.data.length > 0) {
+ this.tableData = response.data.data.map(item => ({
+ HMaterID: item.HMaterID,
+ 鐗╂枡浠g爜: item.鐗╂枡浠g爜,
+ 鐗╂枡鍚嶇О: item.鐗╂枡鍚嶇О,
+ 瑙勬牸鍨嬪彿: item.瑙勬牸鍨嬪彿,
+ HUnitID: item.HUnitID,
+ 璁¢噺鍗曚綅: item.璁¢噺鍗曚綅,
+ HQtyMust: item.搴旀敹鏁伴噺,
+ HQty: item.瀹炴敹鏁伴噺,
+ HPrice: item.鍗曚环,
+ HMoney: item.閲戦,
+ HOrderPrice: item.閲囪喘閲戦,
+ HWHID: item.HWHID,
+ 璋冨叆浠撳簱: item.璋冨叆浠撳簱,
+ HSCWHID: item.HSCWHID,
+ 璋冨嚭浠撳簱: item.璋冨嚭浠撳簱,
+ HBatchNo: item.鎵规,
+ HRemark: item.琛ㄤ綋澶囨敞
+ }))
+ }
+ } else {
+ this.$message.error(response.data.msg || '鍔犺浇鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鍔犺浇鍗曟嵁鏁版嵁澶辫触:', error)
+ this.$message.error('鍔犺浇鍗曟嵁鏁版嵁澶辫触')
+ }
+ },
+
+ // 閮ㄩ棬閫夋嫨
+ handleSelectDept() {
+ console.log('鎵撳紑閮ㄩ棬閫夋嫨')
+ this.deptVisible = true
+ },
+
+ // 璋冨叆浠撳簱閫夋嫨
+ handleSelectInWarehouse() {
+ console.log('鎵撳紑璋冨叆浠撳簱閫夋嫨')
+ this.warehouseType = 'HWH'
+ this.warehouseVisible = true
+ this.currentField = 'inWarehouse'
+ },
+
+ // 璋冨嚭浠撳簱閫夋嫨
+ handleSelectOutWarehouse() {
+ console.log('鎵撳紑璋冨叆浠撳簱閫夋嫨')
+ this.warehouseType = 'HSCWH'
+ this.warehouseVisible = true
+ this.currentField = 'outWarehouse'
+ },
+
+ // 閮ㄩ棬閫夋嫨鍥炶皟 - 鍗曞嚮
+ handleDeptSelect(selectedData) {
+ if (selectedData) {
+ this.form.HDeptName = selectedData.閮ㄩ棬鍚嶇О
+ this.form.HDeptID = selectedData.HItemID
+ this.deptVisible = false
+ }
+ },
+
+ // 閮ㄩ棬閫夋嫨鍥炶皟 - 鍙屽嚮
+ handleDeptSelectDb(selectedData) {
+ this.handleDeptSelect(selectedData)
+ },
+
+ // 浠撳簱閫夋嫨鍥炶皟 - 鍗曞嚮
+ handleWarehouseSelect(selectedData) {
+ if (selectedData) {
+ const warehouse = selectedData
+ if (this.currentField === 'inWarehouse') {
+ this.form.HWHName = warehouse.浠撳簱鍚嶇О
+ this.form.HWHID = warehouse.HItemID
+ } else if (this.currentField === 'outWarehouse') {
+ this.form.HSCWHName = warehouse.浠撳簱鍚嶇О
+ this.form.HSCWHID = warehouse.HItemID
+ } else if (this.currentField === 'tableInWarehouse') {
+ this.tableData[this.currentRowIndex].璋冨叆浠撳簱 = warehouse.浠撳簱鍚嶇О
+ this.tableData[this.currentRowIndex].HWHID = warehouse.HItemID
+ } else if (this.currentField === 'tableOutWarehouse') {
+ this.tableData[this.currentRowIndex].璋冨嚭浠撳簱 = warehouse.浠撳簱鍚嶇О
+ this.tableData[this.currentRowIndex].HSCWHID = warehouse.HItemID
+ }
+ this.warehouseVisible = false
+ // 閲嶇疆褰撳墠閫夋嫨
+ this.currentRowIndex = null
+ this.currentField = ''
+ }
+ },
+
+ // 浠撳簱閫夋嫨鍥炶皟 - 鍙屽嚮
+ handleWarehouseSelectDb(selectedData) {
+ this.handleWarehouseSelect(selectedData)
+ },
+
+ // 琛ㄦ牸琛屼粨搴撻�夋嫨
+ handleInWarehouseFocus(index, row) {
+ this.currentRowIndex = index
+ this.warehouseType = 'HWH'
+ this.warehouseVisible = true
+ this.currentField = 'tableInWarehouse'
+ },
+
+ handleOutWarehouseFocus(index, row) {
+ this.currentRowIndex = index
+ this.warehouseType = 'HSCWH'
+ this.warehouseVisible = true
+ this.currentField = 'tableOutWarehouse'
+ },
+ showSupplierDialog() {
+ this.currentDialogType = 'supplier'
+ this.supplierDialogVisible = true
+ },
+ // 鏄剧ず鑱屽憳寮圭獥
+ showEmployeeDialog(type) {
+ this.currentDialogType = type
+ const titleMap = {
+ keeper: '閫夋嫨淇濈鍛�',
+ inspector: '閫夋嫨楠屾敹鍛�',
+ manager: '閫夋嫨璐熻矗浜�',
+ worker: '閫夋嫨璐熻矗浜�',
+ Employee: '閫夋嫨浠撶鍛�'
+ }
+ this.employeeDialogTitle = titleMap[type] || '閫夋嫨鑱屽憳'
+ this.employeeDialogVisible = true
+ },
+ handleEmployeeSelect(data, type) {
+ const fieldMap = {
+ keeper: { id: 'HkeeperId', name: 'HkeeperName' },
+ inspector: { id: 'HSecManagerID', name: 'HSecManagerName' },
+ manager: { id: 'HManagerID', name: 'HManagerName' },
+ Employee: { id: 'HEmpID', name: 'HEmpName' }
+ }
+
+ const field = fieldMap[type]
+ if (field) {
+ this.form[field.id] = data.HItemID
+ this.form[field.name] = data.鑱屽憳鍚嶇О || data.鑱屽憳浠g爜
+ }
+ console.log(`閫夋嫨鐨�${type}:`, data)
+ },
+
+
+ handleSupplierSelect(data, type) {
+ this.form.HSupID = data.HItemID
+ this.form.HSupName = data.渚涘簲鍟嗗悕绉� || data.渚涘簲鍟嗕唬鐮�
+ console.log('閫夋嫨鐨勪緵搴斿晢:', data)
+ },
+
+
+ // 琛ㄦ牸鎿嶄綔
+ handleAddLine() {
+ this.tableData.push({
+ HMaterID: 0,
+ 鐗╂枡浠g爜: '',
+ 鐗╂枡鍚嶇О: '',
+ 瑙勬牸鍨嬪彿: '',
+ HUnitID: 0,
+ 璁¢噺鍗曚綅: '',
+ HSecUnitRate: '0',
+ HSecUnitID: '0',
+ 杈呭姪璁¢噺鍗曚綅: '',
+ HQtyMust: 0,
+ HQty: 0,
+ HPrice: 0,
+ HMoney: 0,
+ HOrderPrice: 0,
+ HWHID: 0,
+ 璋冨叆浠撳簱: '',
+ HSCWHID: 0,
+ 璋冨嚭浠撳簱: '',
+ HBatchNo: '',
+ HRemark: ''
+ })
+ },
+
+ handleCopyLine() {
+ if (this.selectedRows.length === 1) {
+ const copyData = JSON.parse(JSON.stringify(this.selectedRows[0]))
+ this.tableData.push(copyData)
+ } else {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹繘琛屽鍒�')
+ }
+ },
+
+ handleDeleteLine(index) {
+ if (this.tableData.length > 1) {
+ this.tableData.splice(index, 1)
+ } else {
+ this.$message.warning('鑷冲皯淇濈暀涓�琛屾暟鎹�')
+ }
+ },
+
+ handleSelectionChange(selection) {
+ this.selectedRows = selection
+ },
+
+ handleInventoryQuery() {
+ this.$message.info('搴撳瓨鏌ヨ鍔熻兘寰呭疄鐜�')
+ },
+
+ handleInOutQuery() {
+ this.$message.info('鍑哄叆搴撹褰曟煡璇㈠姛鑳藉緟瀹炵幇')
+ },
+
+ // 淇濆瓨
+ async handleSave() {
+ try {
+ await this.$refs.form.validate()
+ // 纭繚鍏抽敭瀛楁鏈夊��
+ if (!this.form.HWHID || this.form.HWHID === 0) {
+ this.$message.error('璇烽�夋嫨璋冨叆浠撳簱')
+ return
+ }
+ if (!this.form.HSCWHID || this.form.HSCWHID === 0) {
+ this.$message.error('璇烽�夋嫨璋冨嚭浠撳簱')
+ return
+ }
+ if (!this.form.HDeptID || this.form.HDeptID === 0) {
+ this.$message.error('璇烽�夋嫨閮ㄩ棬')
+ return
+ }
+
+ // 纭繚琛ㄦ牸鏁版嵁涓殑浠撳簱ID涔熸湁鍊�
+ const hasValidTableData = this.tableData.every(row =>
+ row.HMaterID && row.HMaterID !== 0 &&
+ row.HUnitID && row.HUnitID !== 0
+ )
+
+ if (!hasValidTableData) {
+ // this.$message.error('璇峰畬鍠勮〃鏍间腑鐨勭墿鏂欏拰鍗曚綅淇℃伅')
+ // return
+ this.tableData=[];
+ }
+ // const formData = {
+ // mainData: JSON.stringify([this.form]), // 涓昏〃鏁版嵁锛屽寘瑁呮垚鏁扮粍
+ // tableData: JSON.stringify(this.tableData), // 瀛愯〃鏁版嵁
+ // operationType: this.operationType,
+ // user: sessionStorage['HUserName'] || 'admin',
+ // allData: JSON.stringify({ // 涓昏〃+瀛愯〃鎵�鏈夋暟鎹�
+ // main: this.form,
+ // table: this.tableData
+ // })
+ // }
+ //const formData=JSON.stringify(this.form)+';'+JSON.stringify(this.tableData)+';'+this.operationType+';'+(sessionStorage['HUserName'] || 'admin');
+ const submitData =
+ JSON.stringify(this.form) + ';' +
+ JSON.stringify(this.tableData) + ';' +
+ this.operationType + ';' +
+ (sessionStorage['HUserName'] || 'admin') + ';' +
+ JSON.stringify({ main: this.form, table: this.tableData })
+ console.log('鎻愪氦鐨勫畬鏁存暟鎹�:', submitData)
+
+ const response = await axios.post(`${this.baseURL}/Kf_StepFoldOutBill/Kf_StepFoldOutBillEdit`, {
+ sMainSub: submitData
+ })
+
+ if (response.data && response.data.count === 1) {
+ this.$message.success(response.data.Message || '淇濆瓨鎴愬姛')
+ this.handleClose()
+ this.$emit('saved')
+ } else {
+ this.$message.error(response.data.Message || '淇濆瓨澶辫触')
+ }
+ } catch (error) {
+ console.error('淇濆瓨澶辫触:', error)
+ if (error.response && error.response.data) {
+ this.$message.error(error.response.data.Message || '淇濆瓨澶辫触')
+ } else {
+ this.$message.error('淇濆瓨澶辫触')
+ }
+ }
+ },
+
+ // 鍏抽棴
+ handleClose() {
+ this.dialogVisible = false
+ this.$emit('update:visible', false)
+ this.$emit('closed')
+ },
+
+ // 宸ュ叿鏂规硶
+ formatDate(date) {
+ if (!date) return ''
+ const d = new Date(date)
+ const year = d.getFullYear()
+ const month = String(d.getMonth() + 1).padStart(2, '0')
+ const day = String(d.getDate()).padStart(2, '0')
+ return `${year}-${month}-${day}`
+ }
+ }
+}
+</script>
+
+<style scoped>
+.app-container {
+ padding: 0;
+}
+
+.dialog-footer {
+ text-align: center;
+ padding: 20px 0 0;
+}
+
+.table-section {
+ margin-top: 20px;
+ border: 1px solid #e6ebf5;
+ border-radius: 4px;
+ padding: 10px;
+}
+
+.table-toolbar {
+ margin-bottom: 10px;
+}
+
+.el-form-item {
+ margin-bottom: 18px;
+}
+
+.el-tabs {
+ margin-top: -20px;
+}
+
+.el-table {
+ margin-top: 10px;
+}
+
+.el-input-number {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/FbStepFoldinBillList/EmployeeDialog.vue b/src/views/FbStepFoldinBillList/EmployeeDialog.vue
new file mode 100644
index 0000000..7b07a3b
--- /dev/null
+++ b/src/views/FbStepFoldinBillList/EmployeeDialog.vue
@@ -0,0 +1,546 @@
+<template>
+ <el-dialog
+ :title="dialogTitle"
+ :visible.sync="isVisible"
+ width="80%"
+ top="5vh"
+ :close-on-click-modal="false"
+ @closed="handleClosed"
+ >
+ <div class="employee-dialog">
+ <el-card>
+ <el-form :inline="true" :model="queryForm" class="mb-8" ref="queryFormRef">
+ <el-collapse v-model="activeCollapse">
+ <el-collapse-item title="鏇村" name="more">
+ <el-row :gutter="12">
+ <el-col :span="8">
+ <el-form-item label="鑱屽憳浠g爜">
+ <el-input
+ v-model="queryForm.HNumber"
+ placeholder="鑱屽憳浠g爜"
+ @keydown.enter="handleSearch"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鑱屽憳鍚嶇О">
+ <el-input
+ v-model="queryForm.HName"
+ placeholder="鑱屽憳鍚嶇О"
+ @keydown.enter="handleSearch"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="缁勭粐鍚嶇О">
+ <el-select v-model="queryForm.HUSEORGID" placeholder="璇烽�夋嫨缁勭粐">
+ <el-option
+ v-for="org in organizations"
+ :key="org.ID"
+ :label="org.Name"
+ :value="org.Name"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12" style="margin-top: 12px;">
+ <el-col :span="24">
+ <!-- 杩囨护鏉′欢 -->
+ <el-row :gutter="12" style="margin-bottom: 10px;">
+ <el-col :span="6">
+ <el-form-item label="杩囨护">
+ <el-select v-model="queryForm.ColName">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="col in filterColumns"
+ :key="col.field"
+ :value="col.field"
+ :label="col.title"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="queryForm.Comparator">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="queryForm.ColContent" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12" style="margin-bottom: 10px;">
+ <el-col :span="6">
+ <el-form-item label="杩囨护">
+ <el-select v-model="queryForm.ColName1">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="col in filterColumns"
+ :key="col.field"
+ :value="col.field"
+ :label="col.title"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="queryForm.Comparator1">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="queryForm.ColContent1" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12">
+ <el-col :span="6">
+ <el-form-item label="杩囨护">
+ <el-select v-model="queryForm.ColName2">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="col in filterColumns"
+ :key="col.field"
+ :value="col.field"
+ :label="col.title"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="queryForm.Comparator2">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="queryForm.ColContent2" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+ </el-col>
+ </el-row>
+ </el-collapse-item>
+ </el-collapse>
+
+ <div style="margin-top: 12px;">
+ <el-button type="primary" icon="el-icon-search" @click="handleSearch">鏌ヨ</el-button>
+ <el-button @click="handleReset">閲嶇疆</el-button>
+ <div v-if="currentFilterName" style="display: inline-block; margin-left: 12px; color: #fc9393; font-weight: 600">
+ 褰撳墠杩囨护鏂规锛歿{ currentFilterName }}
+ </div>
+ </div>
+ </el-form>
+
+ <el-table
+ :data="tableData"
+ stripe
+ border
+ style="width: 100%;"
+ height="400"
+ v-loading="loading"
+ @row-dblclick="handleRowDoubleClick"
+ @selection-change="handleSelectionChange"
+ ref="tableRef"
+ >
+ <el-table-column type="selection" width="55" />
+ <el-table-column
+ v-for="column in tableColumns"
+ :key="column.field"
+ :prop="column.field"
+ :label="column.title"
+ :width="column.width"
+ :formatter="column.formatter"
+ >
+ <template v-if="column.field === '鑱屽憳浠g爜'" #default="scope">
+ <span style="color: blue; cursor: pointer;" @click="handleCodeClick(scope.row)">
+ {{ scope.row.鑱屽憳浠g爜 }}
+ </span>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <el-pagination
+ style="margin-top: 12px;"
+ background
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ :page-size.sync="pageSize"
+ :current-page.sync="page"
+ @current-change="handlePageChange"
+ @size-change="handleSizeChange"
+ :page-sizes="[50, 500, 5000, 50000]"
+ />
+ </el-card>
+ </div>
+
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="handleCancel">鍙栨秷</el-button>
+ <el-button type="primary" @click="handleConfirm">纭畾</el-button>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import axios from 'axios'
+
+export default {
+ name: 'EmployeeDialog',
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ dialogType: {
+ type: String,
+ default: 'employee' // employee, manager, keeper, worker 绛�
+ },
+ dialogTitle: {
+ type: String,
+ default: '閫夋嫨鑱屽憳'
+ }
+ },
+ data() {
+ return {
+ // 鍐呴儴鍙帶鐨勫彲瑙佹�э紝閬垮厤鐩存帴淇敼 prop 瀵艰嚧鐨勫弻鍚戝洖璺�
+ isVisible: this.visible,
+ queryForm: {
+ HNumber: '',
+ HName: '',
+ HUSEORGID: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: '',
+ ColName1: '0',
+ Comparator1: '0',
+ ColContent1: '',
+ ColName2: '0',
+ Comparator2: '0',
+ ColContent2: ''
+ },
+ organizations: [],
+ tableData: [],
+ tableColumns: [],
+ filterColumns: [],
+ loading: false,
+ page: 1,
+ pageSize: 50,
+ total: 0,
+ selectedRows: [],
+ currentFilterName: '',
+ activeCollapse: ['more'],
+ baseURL: process.env.VUE_APP_BASE_URL || "http://47.96.97.237/API/"
+ }
+ },
+ watch: {
+ visible(val) {
+ this.isVisible = val
+ if (val) {
+ this.initDialog()
+ }
+ },
+ isVisible(val) {
+ this.$emit('update:visible', val)
+ }
+ },
+ methods: {
+ async initDialog() {
+ await this.getOrganizations()
+ await this.getEmployeeList()
+ this.initFilterColumns()
+ },
+
+ // 鑾峰彇缁勭粐鍒楄〃
+ async getOrganizations() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Web/GetOrganizations`)
+ if (response.data.count === 1) {
+ this.organizations = response.data.data
+ const defaultOrg = sessionStorage.getItem('Organization')
+ if (defaultOrg) {
+ this.queryForm.HUSEORGID = defaultOrg
+ }
+ }
+ } catch (error) {
+ console.error('鑾峰彇缁勭粐鍒楄〃澶辫触:', error)
+ this.$message.error('鑾峰彇缁勭粐鍒楄〃澶辫触')
+ }
+ },
+
+ // 鑾峰彇鑱屽憳鍒楄〃
+ async getEmployeeList(sWhere = '') {
+ this.loading = true
+ try {
+ let finalWhere = sWhere
+ const params = this.$route.query
+ if (params.openType === '2') {
+ finalWhere += " and 绂佺敤鏍囪 = '' and 瀹℃牳浜� != '' "
+ }
+
+ const orgFilter = await this.getOrgFilterByUser()
+ finalWhere += orgFilter
+console.log('鏈�缁堣繃婊ゆ潯浠�:', finalWhere)
+ const requestParams = {
+ sWhere: finalWhere,
+ user: sessionStorage.getItem('HUserName') || 'admin',
+ Organization: this.queryForm.HUSEORGID
+ }
+ console.log('璇锋眰鍙傛暟:', requestParams)
+ const response = await axios.get(`${this.baseURL}/Gy_Employee/list`, { params: requestParams })
+
+ if (response.data.count === 1) {
+ this.tableData = response.data.data || []
+ this.total = response.data.count || 0
+
+ if (response.data.list.length > 0) {
+ this.setTableColumns(response.data.list)
+ }
+ } else {
+ this.$message.error(response.data.Message || '鑾峰彇鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鑾峰彇鑱屽憳鍒楄〃澶辫触:', error)
+ this.$message.error('鑾峰彇鑱屽憳鍒楄〃澶辫触')
+ } finally {
+ this.loading = false
+ }
+ },
+
+ async getOrgFilterByUser() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Xt_User/getOrgIDListByUser`, {
+ params: {
+ UserID: sessionStorage.getItem('Czybm'),
+ UserName: sessionStorage.getItem('HUserName'),
+ HOrgID: this.queryForm.HUSEORGID??'100038'
+ }
+ })
+console.log('缁勭粐杩囨护鍝嶅簲:', response)
+ if (response.data.count === 1) {
+ if (response.data.data[0].sWhere === "1") {
+ //return ` and 缁勭粐鍚嶇О = '${this.queryForm.HUSEORGID}'`
+ return ''
+ } else {
+ return response.data.data[0].sWhere
+ }
+ }
+ } catch (error) {
+ console.error('鑾峰彇鐢ㄦ埛缁勭粐杩囨护鏉′欢澶辫触:', error)
+ }
+ return " and 1 = 0"
+ },
+
+ // 璁剧疆琛ㄦ牸鍒�
+ setTableColumns(columnDefs) {
+ const columns = []
+ const filterCols = []
+ const hideFields = ['HItemID', 'HDeptID', 'HGroupID']
+
+ // 娣诲姞閫夋嫨鍒�
+ columns.push({ type: 'selection', fixed: 'left' })
+
+ columnDefs.forEach(item => {
+ const colDef = {
+ field: item.ColmCols,
+ title: item.ColmCols,
+ width: 140
+ }
+
+ // 璁剧疆鍒楁牸寮�
+ switch (item.ColmType) {
+ case 'DateTime':
+ colDef.formatter = (row, col, cellValue) => this.formatDateTime(cellValue)
+ colDef.width = 160
+ break
+ case 'Decimal':
+ case 'Int32':
+ colDef.width = 120
+ break
+ }
+
+ if (item.ColmCols === '鑱屽憳浠g爜') {
+ colDef.width = 160
+ }
+
+ columns.push(colDef)
+
+
+ if (!hideFields.includes(item.ColmCols)) {
+ filterCols.push(colDef)
+ }
+ })
+
+ this.tableColumns = columns
+ this.filterColumns = filterCols
+ },
+
+ initFilterColumns() {
+ },
+
+ handleSearch() {
+ const sWhere = this.buildWhereClause()
+ this.page = 1
+ this.getEmployeeList(sWhere)
+ },
+
+ buildWhereClause() {
+ const sWhereParts = []
+ const q = this.queryForm
+
+ const buildComparator = (col, cmp, content) => {
+ if (!col || !cmp || cmp === '0' || !content) return ''
+ let com = ''
+ switch (cmp) {
+ case '7': com = `like '%${content}%'`; break
+ case '8': com = `like '%${content}'`; break
+ case '9': com = `like '${content}%'`; break
+ case '10': com = `not like '%${content}%'`; break
+ default: com = `${cmp} '${content}'`; break
+ }
+ return ` and ${col} ${com}`
+ }
+
+ if (q.ColName && q.Comparator && q.Comparator !== '0' && q.ColContent)
+ sWhereParts.push(buildComparator(q.ColName, q.Comparator, q.ColContent))
+ if (q.ColName1 && q.Comparator1 && q.Comparator1 !== '0' && q.ColContent1)
+ sWhereParts.push(buildComparator(q.ColName1, q.Comparator1, q.ColContent1))
+ if (q.ColName2 && q.Comparator2 && q.Comparator2 !== '0' && q.ColContent2)
+ sWhereParts.push(buildComparator(q.ColName2, q.Comparator2, q.ColContent2))
+
+ if (q.HNumber) sWhereParts.push(` and 鑱屽憳浠g爜 like '%${q.HNumber}%'`)
+ if (q.HName) sWhereParts.push(` and 鑱屽憳鍚嶇О like '%${q.HName}%'`)
+
+ return sWhereParts.join('')
+ },
+
+ // 澶勭悊閲嶇疆
+ handleReset() {
+ this.queryForm = {
+ HNumber: '',
+ HName: '',
+ HUSEORGID: this.organizations.length > 0 ? this.organizations[0].Name : '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: '',
+ ColName1: '0',
+ Comparator1: '0',
+ ColContent1: '',
+ ColName2: '0',
+ Comparator2: '0',
+ ColContent2: ''
+ }
+ this.page = 1
+ this.getEmployeeList()
+ },
+
+ handleRowDoubleClick(row) {
+ this.selectedRows = [row]
+ this.handleConfirm()
+ },
+
+ handleSelectionChange(selection) {
+ this.selectedRows = selection
+ },
+
+ handleCodeClick(row) {
+ console.log('鎵撳紑鑱屽憳璇︽儏:', row)
+ },
+
+ handlePageChange(val) {
+ this.page = val
+ this.getEmployeeList(this.buildWhereClause())
+ },
+
+ handleSizeChange(val) {
+ this.pageSize = val
+ this.page = 1
+ this.getEmployeeList(this.buildWhereClause())
+ },
+
+
+ handleConfirm() {
+ if (this.selectedRows.length === 0) {
+ this.$message.warning('璇烽�夋嫨鑱屽憳')
+ return
+ }
+
+ const selectedData = this.selectedRows[0]
+ this.$emit('select', selectedData, this.dialogType)
+ this.$emit('update:visible', false)
+ },
+
+
+ handleCancel() {
+ this.$emit('update:visible', false)
+ },
+
+ handleClosed() {
+ this.selectedRows = []
+ this.$emit('closed')
+ },
+
+ formatDateTime(value) {
+ if (!value) return ''
+ try {
+ const d = new Date(value)
+ return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')} ${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}:${String(d.getSeconds()).padStart(2, '0')}`
+ } catch (e) {
+ return value
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+.employee-dialog {
+ height: 60vh;
+}
+
+.mb-8 {
+ margin-bottom: 8px;
+}
+
+.dialog-footer {
+ text-align: right;
+}
+
+::v-deep .el-table {
+ font-size: 14px;
+}
+
+::v-deep .el-table .cell {
+ padding: 8px 12px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/FbStepFoldinBillList/SupplierDialog.vue b/src/views/FbStepFoldinBillList/SupplierDialog.vue
new file mode 100644
index 0000000..7246adc
--- /dev/null
+++ b/src/views/FbStepFoldinBillList/SupplierDialog.vue
@@ -0,0 +1,594 @@
+<template>
+ <el-dialog
+ :title="dialogTitle"
+ :visible.sync="isVisible"
+ width="90%"
+ top="5vh"
+ :close-on-click-modal="false"
+ @closed="handleClosed"
+ >
+ <div class="supplier-dialog">
+ <el-card>
+ <el-form :inline="true" :model="queryForm" class="mb-8" ref="queryFormRef">
+ <el-collapse v-model="activeCollapse">
+ <el-collapse-item title="鏇村" name="more">
+ <el-row :gutter="12">
+ <el-col :span="8">
+ <el-form-item label="渚涘簲鍟嗕唬鐮�">
+ <el-input
+ v-model="queryForm.HNumber"
+ placeholder="渚涘簲鍟嗕唬鐮�"
+ @keydown.enter="handleSearch"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="渚涘簲鍟嗗悕绉�">
+ <el-input
+ v-model="queryForm.HName"
+ placeholder="渚涘簲鍟嗗悕绉�"
+ @keydown.enter="handleSearch"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="缁勭粐鍚嶇О">
+ <el-select v-model="queryForm.HUSEORGID" placeholder="璇烽�夋嫨缁勭粐">
+ <el-option
+ v-for="org in organizations"
+ :key="org.ID"
+ :label="org.Name"
+ :value="org.Name"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12" style="margin-top: 12px;">
+ <el-col :span="24">
+ <!-- 杩囨护鏉′欢1 -->
+ <el-row :gutter="12" style="margin-bottom: 10px;">
+ <el-col :span="6">
+ <el-form-item label="杩囨护">
+ <el-select v-model="queryForm.ColName">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="col in filterColumns"
+ :key="col.field"
+ :value="col.field"
+ :label="col.title"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="queryForm.Comparator">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="queryForm.ColContent" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+
+ <!-- 杩囨护鏉′欢2 -->
+ <el-row :gutter="12" style="margin-bottom: 10px;">
+ <el-col :span="6">
+ <el-form-item label="杩囨护1">
+ <el-select v-model="queryForm.ColName1">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="col in filterColumns"
+ :key="col.field"
+ :value="col.field"
+ :label="col.title"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="queryForm.Comparator1">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="queryForm.ColContent1" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+
+ <!-- 杩囨护鏉′欢3 -->
+ <el-row :gutter="12">
+ <el-col :span="6">
+ <el-form-item label="杩囨护2">
+ <el-select v-model="queryForm.ColName2">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="col in filterColumns"
+ :key="col.field"
+ :value="col.field"
+ :label="col.title"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="queryForm.Comparator2">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="queryForm.ColContent2" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+ </el-col>
+ </el-row>
+ </el-collapse-item>
+ </el-collapse>
+
+ <div style="margin-top: 12px;">
+ <el-button type="primary" icon="el-icon-search" @click="handleSearch">鏌ヨ</el-button>
+ <el-button @click="handleReset">閲嶇疆</el-button>
+ <div v-if="currentFilterName" style="display: inline-block; margin-left: 12px; color: #fc9393; font-weight: 600">
+ 褰撳墠杩囨护鏂规锛歿{ currentFilterName }}
+ </div>
+ </div>
+ </el-form>
+
+ <el-row :gutter="12" style="height: 500px;">
+ <!-- 宸︿晶鏍戝舰缁撴瀯 -->
+ <el-col :span="6">
+ <el-card style="height: 100%;">
+ <div class="tree-container">
+ <el-tree
+ :data="treeData"
+ :props="treeProps"
+ node-key="id"
+ default-expand-all
+ highlight-current
+ @node-click="handleTreeNodeClick"
+ >
+ <span class="custom-tree-node" slot-scope="{ node, data }">
+ <span>{{ node.label }}</span>
+ </span>
+ </el-tree>
+ </div>
+ </el-card>
+ </el-col>
+
+ <!-- 鍙充晶琛ㄦ牸 -->
+ <el-col :span="18">
+ <el-card style="height: 100%;">
+ <el-table
+ :data="tableData"
+ stripe
+ border
+ style="width: 100%; height: 100%;"
+ v-loading="loading"
+ @row-dblclick="handleRowDoubleClick"
+ @selection-change="handleSelectionChange"
+ ref="tableRef"
+ >
+ <el-table-column type="selection" width="55" />
+ <el-table-column
+ v-for="column in tableColumns"
+ :key="column.field"
+ :prop="column.field"
+ :label="column.title"
+ :width="column.width"
+ :formatter="column.formatter"
+ >
+ <template v-if="column.field === '渚涘簲鍟嗕唬鐮�'" #default="scope">
+ <span style="color: blue; cursor: pointer;" @click="handleCodeClick(scope.row)">
+ {{ scope.row.渚涘簲鍟嗕唬鐮� }}
+ </span>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <el-pagination
+ style="margin-top: 12px;"
+ background
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ :page-size.sync="pageSize"
+ :current-page.sync="page"
+ @current-change="handlePageChange"
+ @size-change="handleSizeChange"
+ :page-sizes="[50, 500, 5000, 50000]"
+ />
+ </el-card>
+ </el-col>
+ </el-row>
+ </el-card>
+ </div>
+
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="handleCancel">鍙栨秷</el-button>
+ <el-button type="primary" @click="handleConfirm">纭畾</el-button>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import axios from 'axios'
+
+export default {
+ name: 'SupplierDialog',
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ dialogType: {
+ type: String,
+ default: 'supplier'
+ }
+ },
+ data() {
+ return {
+
+ isVisible: this.visible,
+ dialogTitle: '閫夋嫨渚涘簲鍟�',
+ queryForm: {
+ HNumber: '',
+ HName: '',
+ HUSEORGID: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: '',
+ ColName1: '0',
+ Comparator1: '0',
+ ColContent1: '',
+ ColName2: '0',
+ Comparator2: '0',
+ ColContent2: ''
+ },
+ organizations: [],
+ tableData: [],
+ tableColumns: [],
+ filterColumns: [],
+ treeData: [],
+ treeProps: {
+ children: 'children',
+ label: 'title'
+ },
+ loading: false,
+ page: 1,
+ pageSize: 50,
+ total: 0,
+ selectedRows: [],
+ currentFilterName: '',
+ activeCollapse: ['more'],
+ baseURL: process.env.VUE_APP_BASE_URL || "http://47.96.97.237/API/"
+ }
+ },
+ watch: {
+ visible(val) {
+ this.isVisible = val
+ if (val) {
+ this.initDialog()
+ }
+ },
+
+ isVisible(val) {
+ this.$emit('update:visible', val)
+ }
+ },
+ methods: {
+ async initDialog() {
+ await this.getOrganizations()
+ await this.getSupplierTree()
+ await this.getSupplierList()
+ this.initFilterColumns()
+ },
+
+ // 鑾峰彇缁勭粐鍒楄〃
+ async getOrganizations() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Web/GetOrganizations`)
+ if (response.data.count === 1) {
+ this.organizations = response.data.data
+ // 璁剧疆榛樿缁勭粐
+ const defaultOrg = sessionStorage.getItem('Organization') ||
+ sessionStorage.getItem('OrganizationID')
+ if (defaultOrg) {
+ this.queryForm.HUSEORGID = defaultOrg
+ }
+ }
+ } catch (error) {
+ console.error('鑾峰彇缁勭粐鍒楄〃澶辫触:', error)
+ this.$message.error('鑾峰彇缁勭粐鍒楄〃澶辫触')
+ }
+ },
+
+ // 鑾峰彇渚涘簲鍟嗘爲褰㈡暟鎹�
+ async getSupplierTree() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Gy_BadReason/Gy_SupTypeTreeListByLevel`)
+ if (response.data.count === 1) {
+ this.treeData = JSON.parse(response.data.data)
+ }
+ } catch (error) {
+ console.error('鑾峰彇渚涘簲鍟嗘爲褰㈡暟鎹け璐�:', error)
+ }
+ },
+
+ // 鑾峰彇渚涘簲鍟嗗垪琛�
+ async getSupplierList(sWhere = '') {
+ this.loading = true
+ try {
+ const params = {
+ sWhere: sWhere,
+ user: sessionStorage.getItem('HUserName') || 'admin',
+ Organization: '娴欐睙鏅轰簯杩堟��',
+ page: this.page,
+ size: this.pageSize
+ }
+ console.log('璇锋眰鍙傛暟:', params)
+ const response = await axios.get(`${this.baseURL}/Gy_Supplier/page`, { params })
+
+ if (response.data.code == 1) {
+ this.tableData = response.data.data || []
+ this.total = response.data.count || 0
+
+ if ( response.data.list.length > 0) {
+ this.setTableColumns(response.data.list)
+ }
+ } else {
+ this.$message.error(response.data.Message || '鑾峰彇鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鑾峰彇渚涘簲鍟嗗垪琛ㄥけ璐�:', error)
+ this.$message.error('鑾峰彇渚涘簲鍟嗗垪琛ㄥけ璐�')
+ } finally {
+ this.loading = false
+ }
+ },
+
+ // 璁剧疆琛ㄦ牸鍒�
+ setTableColumns(columnDefs) {
+ const columns = []
+ const filterCols = []
+ const hideFields = ['HItemID', 'sorderid', 'HCurID', 'HSSID', 'HAreaID', 'HPSStyleID']
+
+ // 娣诲姞閫夋嫨鍒�
+ columns.push({ type: 'selection', fixed: 'left' })
+
+ columnDefs.forEach(item => {
+ const colDef = {
+ field: item.ColmCols,
+ title: item.ColmCols,
+ width: 140
+ }
+
+ // 璁剧疆鍒楁牸寮�
+ switch (item.ColmType) {
+ case 'DateTime':
+ colDef.formatter = (row, col, cellValue) => this.formatDateTime(cellValue)
+ break
+ case 'Decimal':
+ case 'Int32':
+ colDef.width = 120
+ break
+ }
+
+ // 鐗规畩澶勭悊渚涘簲鍟嗕唬鐮佸垪
+ if (item.ColmCols === '渚涘簲鍟嗕唬鐮�') {
+ colDef.width = 160
+ }
+
+ columns.push(colDef)
+
+ // 娣诲姞鍒拌繃婊ゅ垪锛堟帓闄ら殣钘忓瓧娈碉級
+ if (!hideFields.includes(item.ColmCols)) {
+ filterCols.push(colDef)
+ }
+ })
+
+ this.tableColumns = columns
+ this.filterColumns = filterCols
+ },
+
+ // 鍒濆鍖栬繃婊ゅ垪
+ initFilterColumns() {
+ // 杩囨护鍒楀凡缁忓湪 setTableColumns 涓缃�
+ },
+
+ // 澶勭悊鏌ヨ
+ handleSearch() {
+ const sWhere = this.buildWhereClause()
+ this.page = 1
+ this.getSupplierList(sWhere)
+ },
+
+ // 鏋勫缓鏌ヨ鏉′欢
+ buildWhereClause() {
+ const sWhereParts = []
+ const q = this.queryForm
+
+ const buildComparator = (col, cmp, content) => {
+ if (!col || !cmp || cmp === '0' || !content) return ''
+ let com = ''
+ switch (cmp) {
+ case '7': com = `like '%${content}%'`; break
+ case '8': com = `like '%${content}'`; break
+ case '9': com = `like '${content}%'`; break
+ case '10': com = `not like '%${content}%'`; break
+ default: com = `${cmp} '${content}'`; break
+ }
+ return ` and ${col} ${com}`
+ }
+
+ // 娣诲姞杩囨护鏉′欢
+ if (q.ColName && q.Comparator && q.Comparator !== '0' && q.ColContent)
+ sWhereParts.push(buildComparator(q.ColName, q.Comparator, q.ColContent))
+ if (q.ColName1 && q.Comparator1 && q.Comparator1 !== '0' && q.ColContent1)
+ sWhereParts.push(buildComparator(q.ColName1, q.Comparator1, q.ColContent1))
+ if (q.ColName2 && q.Comparator2 && q.Comparator2 !== '0' && q.ColContent2)
+ sWhereParts.push(buildComparator(q.ColName2, q.Comparator2, q.ColContent2))
+
+ // 娣诲姞鍩烘湰鏌ヨ鏉′欢
+ if (q.HNumber) sWhereParts.push(` and 渚涘簲鍟嗕唬鐮� like '%${q.HNumber}%'`)
+ if (q.HName) sWhereParts.push(` and 渚涘簲鍟嗗悕绉� like '%${q.HName}%'`)
+
+ return sWhereParts.join('')
+ },
+
+ // 澶勭悊閲嶇疆
+ handleReset() {
+ this.queryForm = {
+ HNumber: '',
+ HName: '',
+ HUSEORGID: this.organizations.length > 0 ? this.organizations[0].Name : '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: '',
+ ColName1: '0',
+ Comparator1: '0',
+ ColContent1: '',
+ ColName2: '0',
+ Comparator2: '0',
+ ColContent2: ''
+ }
+ this.page = 1
+ this.getSupplierList()
+ },
+
+ // 澶勭悊鏍戣妭鐐圭偣鍑�
+ handleTreeNodeClick(data) {
+ let sWhere = ''
+ if (data.id === "100") {
+ sWhere = " and HSupTypeID = 0 "
+ } else if (data.id === "0") {
+ sWhere = ""
+ } else {
+ sWhere = ` and HSupTypeID = '${data.id}' `
+ }
+ this.getSupplierList(sWhere)
+ },
+
+ // 澶勭悊琛屽弻鍑�
+ handleRowDoubleClick(row) {
+ this.selectedRows = [row]
+ this.handleConfirm()
+ },
+
+ // 澶勭悊閫夋嫨鍙樺寲
+ handleSelectionChange(selection) {
+ this.selectedRows = selection
+ },
+
+ // 澶勭悊浠g爜鐐瑰嚮
+ handleCodeClick(row) {
+ // 鍙互鍦ㄨ繖閲屾墦寮�渚涘簲鍟嗚鎯呴〉闈�
+ console.log('鎵撳紑渚涘簲鍟嗚鎯�:', row)
+ },
+
+ // 澶勭悊椤电爜鍙樺寲
+ handlePageChange(val) {
+ this.page = val
+ this.getSupplierList(this.buildWhereClause())
+ },
+
+ // 澶勭悊椤靛ぇ灏忓彉鍖�
+ handleSizeChange(val) {
+ this.pageSize = val
+ this.page = 1
+ this.getSupplierList(this.buildWhereClause())
+ },
+
+ // 澶勭悊纭畾
+ handleConfirm() {
+ if (this.selectedRows.length === 0) {
+ this.$message.warning('璇烽�夋嫨渚涘簲鍟�')
+ return
+ }
+
+ const selectedData = this.selectedRows[0]
+ this.$emit('select', selectedData, this.dialogType)
+ this.$emit('update:visible', false)
+ },
+
+ // 澶勭悊鍙栨秷
+ handleCancel() {
+ this.$emit('update:visible', false)
+ },
+
+ // 澶勭悊瀵硅瘽妗嗗叧闂�
+ handleClosed() {
+ this.selectedRows = []
+ this.$emit('closed')
+ },
+
+ // 鏍煎紡鍖栨棩鏈熸椂闂�
+ formatDateTime(value) {
+ if (!value) return ''
+ try {
+ const d = new Date(value)
+ return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')} ${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}:${String(d.getSeconds()).padStart(2, '0')}`
+ } catch (e) {
+ return value
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+.supplier-dialog {
+ height: 70vh;
+}
+
+.tree-container {
+ height: 100%;
+ overflow-y: auto;
+}
+
+.mb-8 {
+ margin-bottom: 8px;
+}
+
+.custom-tree-node {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 14px;
+ padding-right: 8px;
+}
+
+.dialog-footer {
+ text-align: right;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/FbStepFoldinBillList/fbStepFoldinBillList.vue b/src/views/FbStepFoldinBillList/fbStepFoldinBillList.vue
new file mode 100644
index 0000000..11777f4
--- /dev/null
+++ b/src/views/FbStepFoldinBillList/fbStepFoldinBillList.vue
@@ -0,0 +1,724 @@
+<template>
+ <div style="padding:12px">
+ <el-card>
+ <el-form :inline="true" :model="query" class="mb8" ref="queryForm">
+ <el-form-item label="鏃ユ湡闂撮殧">
+ <el-select v-model="query.HInitTimeCycle" placeholder="璇烽�夋嫨" style="width:160px" @change="onTimeCycleChange">
+ <el-option v-for="(t,i) in timeCycles" :key="i" :label="t.label" :value="t.value" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="寮�濮嬫棩鏈�">
+ <el-date-picker v-model="query.HBeginDate" type="date" placeholder="寮�濮嬫棩鏈�" style="width:160px" :disabled="timeCycleDisabled" />
+ </el-form-item>
+ <el-form-item label="缁撴潫鏃ユ湡">
+ <el-date-picker v-model="query.HEndDate" type="date" placeholder="缁撴潫鏃ユ湡" style="width:160px" :disabled="timeCycleDisabled" />
+ </el-form-item>
+ <el-form-item label="鍗曟嵁鍙�">
+ <el-input v-model="query.HBillNo" style="width:160px" />
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" @click="onSearch">鏌ヨ</el-button>
+ <el-button @click="onReset">閲嶇疆</el-button>
+ </el-form-item>
+ <el-form-item style="margin-left:12px">
+ <div v-if="currentFilterName" style="color:#fc9393;font-weight:600">褰撳墠杩囨护鏂规锛歿{ currentFilterName }}</div>
+ </el-form-item>
+ </el-form>
+
+ <el-form :model="query" ref="filterForm">
+ <el-collapse v-model="activeCollapse" class="filter-collapse">
+ <el-collapse-item title="鏇村" name="more">
+ <el-row :gutter="12">
+ <el-col :span="8">
+ <el-form-item label="閮ㄩ棬">
+ <el-input v-model="query.HDeptID" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡浠g爜">
+ <el-input v-model="query.MaterialCode" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡鍚嶇О">
+ <el-input v-model="query.MaterialName" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瑙勬牸鍨嬪彿">
+ <el-input v-model="query.SpecificationModel" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="婧愬崟鍗曞彿">
+ <el-input v-model="query.HSourceBillNo" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="浠撳簱">
+ <el-input v-model="query.Warehouse" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍒跺崟浜�">
+ <el-input v-model="query.Hmaker" style="width:190px" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12" style="margin-top: 12px;">
+ <el-col :span="24">
+ <el-row :gutter="12" style="margin-bottom: 10px;">
+ <el-col :span="6">
+ <el-form-item label="杩囨护">
+ <el-select v-model="query.ColName" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option v-for="col in filterColumns" :key="col.field" :value="col.field" :label="col.title" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="query.Comparator" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="query.ColContent" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12" style="margin-bottom: 10px;">
+ <el-col :span="6">
+ <el-form-item label="杩囨护1">
+ <el-select v-model="query.ColName1" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option v-for="col in filterColumns" :key="col.field" :value="col.field" :label="col.title" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="query.Comparator1" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="query.ColContent1" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="12">
+ <el-col :span="6">
+ <el-form-item label="杩囨护2">
+ <el-select v-model="query.ColName2" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option v-for="col in filterColumns" :key="col.field" :value="col.field" :label="col.title" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-select v-model="query.Comparator2" style="width:190px">
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="=" />
+ <el-option value=">=" label=">=" />
+ <el-option value=">" label=">" />
+ <el-option value="<=" label="<=" />
+ <el-option value="<" label="<" />
+ <el-option value="<>" label="<>" />
+ <el-option value="7" label="鍖呭惈" />
+ <el-option value="8" label="宸﹀寘鍚�" />
+ <el-option value="9" label="鍙冲寘鍚�" />
+ <el-option value="10" label="涓嶅寘鍚�" />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-input v-model="query.ColContent2" placeholder="杩囨护鍐呭" />
+ </el-col>
+ </el-row>
+ </el-col>
+ </el-row>
+ </el-collapse-item>
+ </el-collapse>
+ </el-form>
+
+ <el-row style="margin-bottom:8px">
+ <el-col>
+ <el-button size="mini" type="primary" @click="handleAdd">鏂板</el-button>
+ <el-button size="mini" @click="handleEdit">缂栬緫</el-button>
+ <el-button size="mini" type="danger" @click="set_DeleteBill">鍒犻櫎</el-button>
+ <el-button size="mini" @click="set_CheckBill(1)">瀹℃牳</el-button>
+ <el-button size="mini" @click="set_CheckBill(2)">鍙嶅鏍�</el-button>
+ <el-button size="mini" @click="set_CloseBill(1)">鍏抽棴</el-button>
+ <el-button size="mini" @click="set_CloseBill(2)">鍙嶅叧闂�</el-button>
+ <el-button size="mini" @click="set_DropBill(1)">浣滃簾</el-button>
+ <el-button size="mini" @click="set_DropBill(2)">鍙嶄綔搴�</el-button>
+ <el-button size="mini" @click="get_ViewReport">棰勮</el-button>
+ <el-button size="mini" @click="get_PrintReport">鎵撳嵃</el-button>
+ <el-button size="mini" @click="get_Refresh">鍒锋柊</el-button>
+ <el-button size="mini" @click="get_BarCodeDetail">鏉$爜鏄庣粏</el-button>
+ </el-col>
+ </el-row>
+
+ <el-table
+ :data="tableData"
+ stripe
+ border
+ style="width:100%"
+ @row-click="onRowClick"
+ @selection-change="onSelectionChange"
+ :loading="loading"
+ ref="mainTable"
+ >
+ <el-table-column type="selection" width="55" />
+ <el-table-column v-for="(col, idx) in tableColumns" :key="idx" :prop="col.field" :label="col.title" :width="col.width" :formatter="col.formatter">
+ <template v-if="col.field === '鍗曟嵁鍙�'" #default="scope">
+ <span style="color: blue; cursor: pointer;" @click="onBillNoClick(scope.row)">{{ scope.row.鍗曟嵁鍙� }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <el-pagination style="margin-top:12px" background layout="total, sizes, prev, pager, next, jumper" :total="total" :page-size.sync="pageSize" :current-page.sync="page" @current-change="pageChange" @size-change="sizeChange" :page-sizes="[50,500,5000,20000]" />
+ </el-card>
+
+ <FbStepFoldinBillEdit
+ :visible.sync="editDialogVisible"
+ :operation-type="operationType"
+ :linterid="currentId"
+ @saved="handleSaved"
+ @closed="handleClosed"
+ />
+ <BarCodeDetail
+ :visible.sync="barcodeDetailVisible"
+ ref="barcodeDetail"
+ />
+ </div>
+</template>
+
+<script>
+import axios from 'axios';
+//import FbStepFoldinBillEdit from './fbStepFoldinBillEdit'
+import FbStepFoldinBillEdit from '@/views/FbStepFoldinBillList/fbStepFoldinBillListEdit'
+import BarCodeDetail from '@/views/component/BarCodeDetail'
+
+
+export default {
+ name: 'FbStepFoldinBillList',
+ components: {
+ FbStepFoldinBillEdit,
+ BarCodeDetail
+ },
+ data() {
+ return {
+
+ editDialogVisible:false,
+ operationType:'1',
+ currentId : '',
+ barcodeDetailVisible: false,// 鏉$爜鏄庣粏寮圭獥鏄剧ず鎺у埗
+
+ query: {
+ HInitTimeCycle: 29,
+ HBeginDate: '',
+ HEndDate: '',
+ HBillNo: '',
+ HDeptID: '',
+ MaterialCode: '',
+ MaterialName: '',
+ SpecificationModel: '',
+ HSourceBillNo: '',
+ Warehouse: '',
+ Hmaker: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: '',
+ ColName1: '0',
+ Comparator1: '0',
+ ColContent1: '',
+ ColName2: '0',
+ Comparator2: '0',
+ ColContent2: ''
+ },
+ timeCycles: [
+ { value: -1, label: '浠绘剰闂撮殧' },
+ { value: 0, label: '浠婂ぉ' },
+ { value: 1, label: '杩戜袱澶�' },
+ { value: 2, label: '杩戜笁澶�' },
+ { value: 3, label: '杩戝洓澶�' },
+ { value: 4, label: '杩戜簲澶�' },
+ { value: 5, label: '杩戝叚澶�' },
+ { value: 6, label: '杩戜竷澶�' },
+ { value: 29, label: '杩�30澶�' },
+ { value: 180, label: '杩戝崐骞�' },
+ { value: 365, label: '杩戜竴骞�' }
+ ],
+ timeCycleDisabled: false,
+ tableColumns: [],
+ filterColumns: [],
+ tableData: [],
+ loading: false,
+ page: 1,
+ pageSize: 50,
+ total: 0,
+ selectedRows: [],
+ currentFilterName: '',
+ activeCollapse: [],
+ baseURL: process.env.VUE_APP_BASE_URL || "http://47.96.97.237/API/",
+ };
+ },
+ created() {
+ this.set_ClearBill();
+ },
+ methods: {
+ // 鍒濆鍖�
+ set_ClearBill() {
+ this.setSelect_HInitTimeCycle();
+ this.setDatesByCycle();
+ this.set_InitGrid();
+ this.ColFilter();
+ this.get_DefaultModule();
+ },
+ setSelect_HInitTimeCycle() {
+ this.query.HInitTimeCycle = 29;
+ },
+ setDatesByCycle() {
+ const end = new Date();
+ const start = new Date();
+ const cycle = this.query.HInitTimeCycle;
+
+ if (cycle === -1) {
+ // 浠绘剰闂撮殧锛屼笉娓呯┖鏃ユ湡
+ this.timeCycleDisabled = false;
+ return;
+ }
+
+ start.setDate(start.getDate() - (cycle >= 0 ? cycle : 0));
+ this.query.HBeginDate = this.formatDate(start);
+ this.query.HEndDate = this.formatDate(end);
+ this.timeCycleDisabled = this.query.HInitTimeCycle !== -1;
+ },
+ formatDate(d) {
+ if (!d) return '';
+ const yyyy = d.getFullYear();
+ const mm = String(d.getMonth() + 1).padStart(2, '0');
+ const dd = String(d.getDate()).padStart(2, '0');
+ return `${yyyy}-${mm}-${dd}`;
+ },
+ onTimeCycleChange() {
+ this.setDatesByCycle();
+ if (this.query.HInitTimeCycle !== -1) {
+ this.onSearch();
+ }
+ },
+ set_InitGrid() {
+ this.tableColumns = [];
+ this.tableData = [];
+ },
+ // 鏂板
+ handleAdd() {
+ this.operationType = '1'
+ this.currentId = ''
+ this.editDialogVisible = true
+ },
+ // 缂栬緫
+ handleEdit(row) {
+ let target = row;
+ console.log('浼犲叆鐨勮瀵硅薄:', target);
+ // 濡傛灉娌℃湁浼犲叆琛屽璞★紝鍒欎娇鐢ㄥ綋鍓嶉�変腑鐨勭涓�琛�
+ if (!target) {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹紒');
+ return;
+ }
+
+ }
+ target = this.selectedRows[0];
+ this.operationType = '3';
+ this.currentId = this.selectedRows[0].hmainid || target.HInterID || target.HItemID || '';
+ console.log('浼犲叆鐨勪富id:', this.currentId);
+ this.editDialogVisible = true;
+ },
+
+ // 淇濆瓨鎴愬姛鍥炶皟
+ handleSaved() {
+ this.get_Display('');
+ this.$message.success('鎿嶄綔鎴愬姛')
+ },
+ handleClosed() {
+ this.editDialogVisible = false,
+ this.currentId = ''
+ },
+ onSearch() {
+ const sWhereParts = [];
+ const q = this.query;
+
+ const buildComparator = (col, cmp, content) => {
+ if (!col || !cmp || cmp === '0' || !content) return '';
+ let com = '';
+ switch (cmp) {
+ case '7': com = `like '%${content}%'`; break;
+ case '8': com = `like '%${content}'`; break;
+ case '9': com = `like '${content}%'`; break;
+ case '10': com = `not like '%${content}%'`; break;
+ default: com = `${cmp} '${content}'`; break;
+ }
+ return ` and ${col} ${com}`;
+ };
+
+ if (q.ColName && q.Comparator && q.Comparator !== '0' && q.ColContent)
+ sWhereParts.push(buildComparator(q.ColName, q.Comparator, q.ColContent));
+ if (q.ColName1 && q.Comparator1 && q.Comparator1 !== '0' && q.ColContent1)
+ sWhereParts.push(buildComparator(q.ColName1, q.Comparator1, q.ColContent1));
+ if (q.ColName2 && q.Comparator2 && q.Comparator2 !== '0' && q.ColContent2)
+ sWhereParts.push(buildComparator(q.ColName2, q.Comparator2, q.ColContent2));
+
+ if (q.HBeginDate) sWhereParts.push(` and CONVERT(varchar(100),鏃ユ湡, 23) >= '${q.HBeginDate}'`);
+ if (q.HEndDate) sWhereParts.push(` and CONVERT(varchar(100),鏃ユ湡, 23) <= '${q.HEndDate}'`);
+ if (q.HBillNo) sWhereParts.push(` and 鍗曟嵁鍙� like '%${q.HBillNo}%'`);
+ if (q.HDeptID) sWhereParts.push(` and 閮ㄩ棬 like '%${q.HDeptID}%'`);
+ if (q.MaterialCode) sWhereParts.push(` and 鐗╂枡浠g爜 like '%${q.MaterialCode}%'`);
+ if (q.MaterialName) sWhereParts.push(` and 鐗╂枡鍚嶇О like '%${q.MaterialName}%'`);
+ if (q.SpecificationModel) sWhereParts.push(` and 瑙勬牸鍨嬪彿 like '%${q.SpecificationModel}%'`);
+ if (q.HSourceBillNo) sWhereParts.push(` and 婧愬崟鍗曞彿 like '%${q.HSourceBillNo}%'`);
+ if (q.Warehouse) sWhereParts.push(` and 浠撳簱鍚嶇О like '%${q.Warehouse}%'`);
+ if (q.Hmaker) sWhereParts.push(` and 鍒跺崟浜� like '%${q.Hmaker}%'`);
+
+ const sWhere = sWhereParts.join('');
+ this.get_Display(sWhere);
+ },
+ onReset() {
+ this.query = {
+ HInitTimeCycle: 29,
+ HBeginDate: '',
+ HEndDate: '',
+ HBillNo: '',
+ HDeptID: '',
+ MaterialCode: '',
+ MaterialName: '',
+ SpecificationModel: '',
+ HSourceBillNo: '',
+ Warehouse: '',
+ Hmaker: '',
+ ColName: '0', Comparator: '0', ColContent: '',
+ ColName1: '0', Comparator1: '0', ColContent1: '',
+ ColName2: '0', Comparator2: '0', ColContent2: ''
+ };
+ this.setDatesByCycle();
+ this.get_Display('');
+ },
+ async get_Display(sWhere) {
+ this.loading = true;
+ try {
+ const userName = sessionStorage['HUserName'] || sessionStorage['Czybm'] || 'admin';
+ const orgName = sessionStorage['OrganizationName'] || sessionStorage['Organization'] || '娴欐睙鏅轰簯杩堟��';
+
+ const url = `${this.baseURL}/Kf_StepFoldinBill/GetStepFoldinBillList`;
+ const params = {
+ sWhere: sWhere || '',
+ user: userName,
+ Organization: orgName
+ };
+
+ const resp = await axios.get(url, { params });
+ const data1 = resp.data;
+
+ if (data1.count === 1) {
+ const colDefs = [];
+ const filterCols = [];
+
+ for (let i = 0; i < data1.list.length; i++) {
+ const item = data1.list[i];
+ const name = item.ColmCols;
+ const type = item.ColmType;
+
+ const colDef = {
+ field: name,
+ title: name,
+ width: 200
+ };
+
+ if (type === 'DateTime') {
+ colDef.formatter = (row, col, cellValue) => this.formatDateTime(cellValue);
+ }
+
+ colDefs.push(colDef);
+
+ // 涓鸿繃婊ゆ潯浠跺噯澶囧垪閫夐」锛堟帓闄ら殣钘忓瓧娈碉級
+ const hideFields = ['hmainid', 'HMaterID', 'HUnitID', 'HICMOEmpID', 'HWHID', '鍗曟嵁ID', '鍗曟嵁绫诲瀷', 'HDeptID', '閮ㄩ棬浠g爜', 'Hunitid',
+ '璁¢噺鍗曚綅浠g爜', '璋冨叆浠撳簱浠g爜', 'HSPID', '璋冨叆浠撲綅浠g爜', 'HSCWHID', '璋冨嚭浠撲綅浠g爜', '璋冨嚭浠撳簱浠g爜', 'HSCSPID', 'HSecManagerID', 'HKeeperID'];
+
+ if (!hideFields.includes(name)) {
+ filterCols.push(colDef);
+ }
+ }
+
+ this.tableColumns = colDefs;
+ this.filterColumns = filterCols;
+ this.tableData = data1.data || [];
+ this.total = data1.count || this.tableData.length;
+ } else {
+ this.$alert((data1.Message || '鑾峰彇鏁版嵁寮傚父'), '閿欒');
+ }
+ } catch (err) {
+ console.error('璇锋眰澶辫触:', err);
+ this.$message.error(`鎺ュ彛璇锋眰澶辫触: ${err.message}`);
+ } finally {
+ this.loading = false;
+ }
+ },
+ formatDateTime(value) {
+ if (!value) return '';
+ try {
+ const d = new Date(value);
+ return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0') + ' ' + String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0') + ':' + String(d.getSeconds()).padStart(2, '0');
+ } catch (e) {
+ return value;
+ }
+ },
+ ColFilter() {
+ },
+ async get_DefaultModule() {
+ try {
+ const url = `${this.baseURL}/Xt_FastICScheme/Chooselist`;
+ const params = {
+ user: sessionStorage['Czybm'] || sessionStorage['HUserName'] || '',
+ HModuleName: '鍒嗘寮忚皟鍏ュ崟缁存姢',
+ HInterID: 0,
+ Type: 'Default'
+ };
+ const resp = await axios.get(url, { params });
+ if (resp.data.count == 1) {
+ const data = resp.data.data;
+ this.currentFilterName = data[0].鏂规鍚嶇О || '';
+ this.onSearch();
+ } else {
+ this.currentFilterName = '';
+ this.onSearch();
+ }
+ } catch (err) {
+ console.warn('鑾峰彇榛樿杩囨护鏂规澶辫触', err);
+ this.onSearch();
+ }
+ },
+ set_AddNew() {
+ window.open('./Fb_StepFoldinBillEdit.html?OperationType=1&linterid=&HSouceBillType=0&closeType=1', '_blank');
+ },
+ set_ShowBill() {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹紪杈戯紒');
+ return;
+ }
+ const id = this.selectedRows[0].hmainid || this.selectedRows[0].HItemID;
+ window.open('./Fb_StepFoldinBillEdit.html?OperationType=3&linterid=' + id, '_blank');
+ },
+ async set_DeleteBill() {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹垹闄わ紒');
+ return;
+ }
+ const row = this.selectedRows[0];
+ if (row.鐘舵�� && row.鐘舵�� !== '鍒涘缓') {
+ this.$message.warning('姝ゆ暟鎹笉鏄垱寤虹姸鎬�,鏃犳硶鍒犻櫎锛�');
+ return;
+ }
+
+ try {
+ await this.$confirm('纭瑕佸垹闄ゅ悧锛屽垹闄ゅ悗涓嶈兘鎭㈠', '鍒犻櫎纭');
+ const url = `${this.baseURL}/Fb_StepFoldInBill/DeltetFb_StepFoldInBill`;
+ const params = { HInterID: (row.hmainid || row.HInterID) };
+ const resp = await axios.get(url, { params });
+
+ if (resp.data.count == 1) {
+ this.$message.success(resp.data.Message || '鍒犻櫎鎴愬姛');
+ this.onSearch();
+ } else {
+ this.$alert((resp.data.Message || '鍒犻櫎澶辫触'), '閿欒');
+ }
+ } catch (err) {
+ if (err !== 'cancel') {
+ this.$message.error('鎺ュ彛璇锋眰澶辫触');
+ }
+ }
+ },
+ // 瀹℃牳/鍙嶅鏍稿姛鑳�
+ async set_CheckBill(type) {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹搷浣滐紒');
+ return;
+ }
+
+ const row = this.selectedRows[0];
+ const actionName = type === 1 ? '瀹℃牳' : '鍙嶅鏍�';
+
+ try {
+ await this.$confirm(`纭瑕�${actionName}姝ゅ崟鎹悧锛焋, `${actionName}纭`);
+
+ const url = `${this.baseURL}/Kf_StepFoldInBill/AuditKf_StepFoldInBill`;
+ const params = {
+ HInterID: (row.hmainid || row.HInterID),
+ Type: type,
+ user: sessionStorage['HUserName'] || ''
+ };
+
+ const resp = await axios.get(url, { params });
+ if (resp.data.count == 1) {
+ this.$message.success(resp.data.Message || `${actionName}鎴愬姛`);
+ this.onSearch();
+ } else {
+ this.$alert((resp.data.Message || `${actionName}澶辫触`), '閿欒');
+ }
+ } catch (err) {
+ if (err !== 'cancel') {
+ this.$message.error('鎺ュ彛璇锋眰澶辫触');
+ }
+ }
+ },
+ // 鍏抽棴/鍙嶅叧闂姛鑳�
+ async set_CloseBill(type) {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹搷浣滐紒');
+ return;
+ }
+
+ const row = this.selectedRows[0];
+ const actionName = type === 1 ? '鍏抽棴' : '鍙嶅叧闂�';
+
+ try {
+ await this.$confirm(`纭瑕�${actionName}姝ゅ崟鎹悧锛焋, `${actionName}纭`);
+
+ const url = `${this.baseURL}/Kf_StepFoldInBill/CloseKf_StepFoldInBill`;
+ const params = {
+ HInterID: (row.hmainid || row.HInterID),
+ Type: type,
+ user: sessionStorage['HUserName'] || ''
+ };
+
+ const resp = await axios.get(url, { params });
+ if (resp.data.count == 1) {
+ this.$message.success(resp.data.Message || `${actionName}鎴愬姛`);
+ this.onSearch();
+ } else {
+ this.$alert((resp.data.Message || `${actionName}澶辫触`), '閿欒');
+ }
+ } catch (err) {
+ if (err !== 'cancel') {
+ this.$message.error('鎺ュ彛璇锋眰澶辫触');
+ }
+ }
+ },
+ // 浣滃簾/鍙嶄綔搴熷姛鑳�
+ async set_DropBill(type) {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹搷浣滐紒');
+ return;
+ }
+
+ const row = this.selectedRows[0];
+ const actionName = type === 1 ? '浣滃簾' : '鍙嶄綔搴�';
+
+ try {
+ await this.$confirm(`纭瑕�${actionName}姝ゅ崟鎹悧锛焋, `${actionName}纭`);
+
+ const url = `${this.baseURL}/Kf_StepFoldInBill/CancellKf_StepFoldInBill`;
+ const params = {
+ HInterID: (row.hmainid || row.HInterID),
+ Type: type,
+ user: sessionStorage['HUserName'] || ''
+ };
+
+ const resp = await axios.get(url, { params });
+ if (resp.data.count == 1) {
+ this.$message.success(resp.data.Message || `${actionName}鎴愬姛`);
+ this.onSearch();
+ } else {
+ this.$alert((resp.data.Message || `${actionName}澶辫触`), '閿欒');
+ }
+ } catch (err) {
+ if (err !== 'cancel') {
+ this.$message.error('鎺ュ彛璇锋眰澶辫触');
+ }
+ }
+ },
+ onRowClick(row) {
+ this.$nextTick(() => {
+ const table = this.$refs.mainTable;
+ if (!table) return;
+ table.toggleRowSelection(row);
+ });
+ },
+ onSelectionChange(selection) {
+ this.selectedRows = selection;
+ },
+ onBillNoClick(row) {
+ const id = row.hmainid || row.HInterID;
+ window.open('./Fb_StepFoldinBillEdit.html?OperationType=3&linterid=' + id, '_blank');
+ },
+ get_BarCodeDetail() {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹煡鐪嬫潯鐮佹槑缁嗭紒')
+ return
+ }
+ this.barcodeDetailVisible = true
+ this.$nextTick(() => {
+ this.$refs.barcodeDetail.open(this.selectedRows[0])
+ })
+ },
+ get_ViewReport() {
+ if (this.selectedRows.length !== 1) {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹墦鍗帮紒');
+ return;
+ }
+ const id = this.selectedRows[0].hmainid;
+ window.open('../../BaseSet/SRM_OpenTmpList.html?linterid=' + id + '&MyMsg=' + id + '&Type=HMouldProdInBill', '_blank');
+ },
+ get_PrintReport() {
+ if (this.selectedRows.length === 0) {
+ this.$message.warning('璇烽�夋嫨鏁版嵁鎵撳嵃锛�');
+ return;
+ }
+ const hmainid = this.selectedRows.map(r => (r.hmainid * (10 ** 8)) + (r.hsubid || 0)).toString();
+ window.open('../../BaseSet/SRM_OpenTmpList.html?linterid=' + hmainid + '&MyMsg=' + hmainid + '&Type=HSeOutStockBillList', '_blank');
+ },
+ get_Refresh() {
+ this.onReset();
+ },
+ pageChange(val) {
+ this.page = val;
+ this.onSearch();
+ },
+ sizeChange(val) {
+ this.pageSize = val;
+ this.onSearch();
+ }
+ }
+};
+</script>
+
+<style scoped>
+ .mb8 { margin-bottom: 8px }
+ .filter-collapse {
+ margin-bottom: 12px;
+ }
+ :deep(.el-collapse-item__header) {
+ font-weight: bold;
+ background-color: #f5f7fa;
+ padding: 0 12px;
+ }
+</style>
\ No newline at end of file
diff --git a/src/views/FbStepFoldinBillList/fbStepFoldinBillListEdit.vue b/src/views/FbStepFoldinBillList/fbStepFoldinBillListEdit.vue
new file mode 100644
index 0000000..5eea970
--- /dev/null
+++ b/src/views/FbStepFoldinBillList/fbStepFoldinBillListEdit.vue
@@ -0,0 +1,1007 @@
+<template>
+ <div class="app-container">
+ <el-dialog
+ :title="dialogTitle"
+ :visible.sync="dialogVisible"
+ :close-on-click-modal="false"
+ width="90%"
+ top="5vh"
+ @close="handleClose"
+ >
+ <!-- 琛ㄥ崟鍐呭 -->
+ <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+ <el-tabs v-model="activeTab">
+ <!-- 鍩烘湰淇℃伅鏍囩椤� -->
+ <el-tab-pane label="鍩烘湰淇℃伅" name="basic">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍗曟嵁鍙�" prop="HBillNo">
+ <el-input v-model="form.HBillNo" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏃ユ湡" prop="HDate">
+ <el-date-picker
+ v-model="form.HDate"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ style="width: 100%"
+ value-format="yyyy-MM-dd"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="婧愬崟绫诲瀷" prop="HSourceBillType">
+ <el-select v-model="form.HSourceBillType" placeholder="璇烽�夋嫨婧愬崟绫诲瀷" style="width: 100%">
+ <el-option
+ v-for="item in sourceBillTypes"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <!-- <el-col :span="8">
+ <el-form-item label="閫夊崟鍙�">
+ <el-input v-model="form.sourceBillNo" placeholder="閫夊崟鍙�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectSourceBill">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col> -->
+ <el-col :span="8">
+ <el-form-item label="渚涘簲鍟�" prop="supplier">
+ <el-input v-model="form.HSupName" placeholder="渚涘簲鍟�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="showSupplierDialog">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="浠撶鍛�">
+ <el-input v-model="form.HEmpName" placeholder="浠撶鍛�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="showEmployeeDialog('Employee')">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="璐熻矗浜�">
+ <el-input v-model="form.HManagerName" placeholder="璐熻矗浜�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="showEmployeeDialog('manager')">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璋冨叆浠撳簱" prop="HWHID">
+ <el-input v-model="form.HWHName" placeholder="璋冨叆浠撳簱" readonly style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectInWarehouse">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璋冨嚭浠撳簱" prop="HSCWHID">
+ <el-input v-model="form.HSCWHName" placeholder="璋冨嚭浠撳簱" readonly style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectOutWarehouse">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="楠屾敹">
+ <el-input v-model="form.HSecManagerName" placeholder="楠屾敹" style="width: calc(100% - 50px)" />
+ <el-button type="primary" icon="el-icon-search" @click="showEmployeeDialog('inspector')">
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="淇濈鍛�">
+ <el-input v-model="form.HKeeperName" placeholder="淇濈鍛�" style="width: calc(100% - 50px)" />
+ <el-button type="primary" icon="el-icon-search" @click="showEmployeeDialog('keeper')">
+ </el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="閮ㄩ棬" prop="HDeptID">
+ <el-input v-model="form.HDeptName" placeholder="閮ㄩ棬" readonly style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectDept">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <!-- <el-col :span="8">
+ <el-form-item label="椤圭洰浠g爜">
+ <el-input v-model="form.HProNumber" placeholder="椤圭洰浠g爜" readonly style="width: calc(100% - 50px)" />
+ <el-button type="primary" style="width: 40px; margin-left: 10px" @click="handleSelectProject">
+ <i class="el-icon-search"></i>
+ </el-button>
+ </el-form-item>
+ </el-col> -->
+ <!-- <el-col :span="8">
+ <el-form-item label="椤圭洰鍚嶇О">
+ <el-input v-model="form.HProName" placeholder="椤圭洰鍚嶇О" readonly />
+ </el-form-item>
+ </el-col> -->
+ <el-col :span="8">
+ <el-form-item label="澶囨敞">
+ <el-input v-model="form.HRemark" placeholder="澶囨敞" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 琛ㄦ牸閮ㄥ垎 -->
+ <div class="table-section">
+ <div class="table-toolbar">
+ <el-button size="mini" @click="handleAddLine">澧炲姞涓�琛�</el-button>
+ <el-button size="mini" @click="handleCopyLine">澶嶅埗涓�琛�</el-button>
+ <el-button size="mini" @click="handleInventoryQuery">搴撳瓨鏌ヨ</el-button>
+ <el-button size="mini" @click="handleInOutQuery">鍑哄叆搴撹褰曟煡璇�</el-button>
+ </div>
+
+ <el-table
+ :data="tableData"
+ border
+ style="width: 100%"
+ height="400"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55" />
+ <el-table-column type="index" label="搴忓彿" width="60" />
+ <el-table-column prop="鐗╂枡浠g爜" label="鐗╂枡浠g爜" width="150">
+ <template slot-scope="scope">
+ <el-input
+ v-model="scope.row.鐗╂枡浠g爜"
+ placeholder="鐗╂枡浠g爜"
+ @focus="handleMaterialFocus(scope.$index, scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="鐗╂枡鍚嶇О" label="鐗╂枡鍚嶇О" width="150" />
+ <el-table-column prop="瑙勬牸鍨嬪彿" label="瑙勬牸鍨嬪彿" width="100" />
+ <el-table-column prop="璁¢噺鍗曚綅" label="璁¢噺鍗曚綅" width="100">
+ <template slot-scope="scope">
+ <el-input
+ v-model="scope.row.璁¢噺鍗曚綅"
+ placeholder="璁¢噺鍗曚綅"
+ @focus="handleUnitFocus(scope.$index, scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HQtyMust" label="搴旀敹鏁伴噺" width="100">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.HQtyMust"
+ :min="0"
+ :precision="2"
+ controls-position="right"
+ style="width: 100%"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HQty" label="瀹炴敹鏁伴噺" width="100">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.HQty"
+ :min="0"
+ :precision="2"
+ controls-position="right"
+ style="width: 100%"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HPrice" label="鍗曚环" width="100">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.HPrice"
+ :min="0"
+ :precision="2"
+ controls-position="right"
+ style="width: 100%"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HMoney" label="閲戦" width="100">
+ <template slot-scope="scope">
+ <el-input-number
+ v-model="scope.row.HMoney"
+ :min="0"
+ :precision="2"
+ controls-position="right"
+ style="width: 100%"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="璋冨叆浠撳簱" label="璋冨叆浠撳簱" width="150">
+ <template slot-scope="scope">
+ <el-input
+ v-model="scope.row.璋冨叆浠撳簱"
+ placeholder="璋冨叆浠撳簱"
+ readonly
+ @focus="handleInWarehouseFocus(scope.$index, scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="璋冨嚭浠撳簱" label="璋冨嚭浠撳簱" width="100">
+ <template slot-scope="scope">
+ <el-input
+ v-model="scope.row.璋冨嚭浠撳簱"
+ placeholder="璋冨嚭浠撳簱"
+ readonly
+ @focus="handleOutWarehouseFocus(scope.$index, scope.row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HBatchNo" label="鎵规" width="100">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.HBatchNo" placeholder="鎵规" />
+ </template>
+ </el-table-column>
+ <el-table-column prop="HRemark" label="澶囨敞" width="100">
+ <template slot-scope="scope">
+ <el-input v-model="scope.row.HRemark" placeholder="澶囨敞" />
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="70" fixed="right">
+ <template slot-scope="scope">
+ <el-button size="mini" type="danger" @click="handleDeleteLine(scope.$index)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </el-tab-pane>
+
+ <!-- 鍒跺崟淇℃伅鏍囩椤� -->
+ <el-tab-pane label="鍒跺崟淇℃伅" name="maker">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍒跺崟浜�">
+ <el-input v-model="form.HMaker" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瀹℃牳浜�">
+ <el-input v-model="form.HChecker" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍏抽棴浜�">
+ <el-input v-model="form.HCloseMan" readonly />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="淇敼浜�">
+ <el-input v-model="form.HUpDater" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="浣滃簾浜�">
+ <el-input v-model="form.HDeleteMan" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍒跺崟鏃ユ湡">
+ <el-input v-model="form.HMakeDate" readonly />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="瀹℃牳鏃ユ湡">
+ <el-input v-model="form.HCheckDate" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍏抽棴鏃ユ湡">
+ <el-input v-model="form.HCloseDate" readonly />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="淇敼鏃ユ湡">
+ <el-input v-model="form.HUpDateDate" readonly />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="浣滃簾鏃ユ湡">
+ <el-input v-model="form.HDeleteDate" readonly />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-tab-pane>
+ </el-tabs>
+ </el-form>
+
+ <!-- 搴曢儴鎸夐挳 -->
+ <div slot="footer" class="dialog-footer">
+ <el-button type="primary" @click="handleSave">淇濆瓨</el-button>
+ <el-button @click="handleClose">閫�鍑�</el-button>
+ </div>
+ </el-dialog>
+
+ <!-- 閮ㄩ棬閫夋嫨瀵硅瘽妗� -->
+ <el-dialog
+ title="閫夋嫨閮ㄩ棬"
+ :visible.sync="deptVisible"
+ width="80%"
+ top="5vh"
+ @close="deptVisible = false"
+ >
+ <dept
+ ref="deptDialog"
+ @deptEmit="handleDeptSelect"
+ @deptEmitDb="handleDeptSelectDb"
+ />
+ </el-dialog>
+
+ <!-- 浠撳簱閫夋嫨瀵硅瘽妗� -->
+ <el-dialog
+ :visible.sync="warehouseVisible"
+ width="80%"
+ top="5vh"
+ @close="warehouseVisible = false"
+ >
+ <warehouse
+ ref="warehouseDialog"
+ :warehouse-type="warehouseType"
+ @deptEmit="handleWarehouseSelect"
+ @deptEmitDb="handleWarehouseSelectDb"
+ />
+ </el-dialog>
+
+ <!-- 渚涘簲鍟嗗脊绐� -->
+ <SupplierDialog
+ :visible.sync="supplierDialogVisible"
+ :dialog-type="currentDialogType"
+ @select="handleSupplierSelect"
+ />
+
+ <!-- 鑱屽憳寮圭獥 -->
+ <EmployeeDialog
+ :visible.sync="employeeDialogVisible"
+ :dialog-type="currentDialogType"
+ :dialog-title="employeeDialogTitle"
+ @select="handleEmployeeSelect"
+ />
+ </div>
+</template>
+
+<script>
+import Dept from '@/views/component/dept'
+import Warehouse from '@/views/component/warehouse'
+import axios from 'axios'
+import SupplierDialog from '@/views/FbStepFoldinBillList/SupplierDialog'
+import EmployeeDialog from '@/views/FbStepFoldinBillList/EmployeeDialog'
+export default {
+ name: 'FbStepFoldinBillEdit',
+ components: {
+ Dept,
+ Warehouse,
+ SupplierDialog,
+ EmployeeDialog
+ },
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ operationType: {
+ type: String,
+ default: '1' // 1:鏂板, 3:缂栬緫
+ },
+ linterid: {
+ type: [String, Number],
+ default: ''
+ }
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ activeTab: 'basic',
+ deptVisible: false,
+ warehouseVisible: false,
+ warehouseType: '',
+ currentRowIndex: null,
+ currentField: '',
+ sourceBillTypes: [
+ { value: '1250', label: '鍒嗘寮忚皟鍑哄崟' }
+ ],
+ supplierDialogVisible: false,
+ employeeDialogVisible: false,
+ currentDialogType: '',
+ employeeDialogTitle: '閫夋嫨鑱屽憳',
+ form: {
+ HInterID: 0,
+ HBillNo: '',
+ HDate: '',
+ HSourceBillType: '',
+ sourceBillNo: '',
+ HSupName: '',
+ HSupID: 0,
+ HEmpName: '',
+ HEmpID: 0,
+ HManagerName: '',
+ HManagerID: 0,
+ HWHName: '',
+ HWHID: 0,
+ HSCWHName: '',
+ HSCWHID: 0,
+ HSecManagerName: '',
+ HSecManagerID: 0,
+ HKeeperName: '',
+ HKeeperID: 0,
+ HDeptName: '',
+ HDeptID: 0,
+ HProNumber: '',
+ HProName: '',
+ HProjectID: 0,
+ HRemark: '',
+ HMaker: '',
+ HChecker: '',
+ HCloseMan: '',
+ HUpDater: '',
+ HDeleteMan: '',
+ HMakeDate: '',
+ HCheckDate: '',
+ HCloseDate: '',
+ HUpDateDate: '',
+ HDeleteDate: '',
+ supplierId: '',
+ keeperId: '',
+ keeperName: '',
+ inspectorId: '',
+ inspectorName: '',
+ managerId: '',
+ managerName: ''
+ },
+ rules: {
+ HWHID: [{ required: true, message: '璇烽�夋嫨璋冨叆浠撳簱', trigger: 'change' }],
+ HSCWHID: [{ required: true, message: '璇烽�夋嫨璋冨嚭浠撳簱', trigger: 'change' }],
+ HDeptID: [{ required: true, message: '璇烽�夋嫨閮ㄩ棬', trigger: 'change' }]
+ },
+ tableData: [
+ {
+ HMaterID: 0,
+ 鐗╂枡浠g爜: '',
+ 鐗╂枡鍚嶇О: '',
+ 瑙勬牸鍨嬪彿: '',
+ HUnitID: 0,
+ 璁¢噺鍗曚綅: '',
+ HSecUnitRate: '0',
+ HSecUnitID: '0',
+ 杈呭姪璁¢噺鍗曚綅: '',
+ HQtyMust: 0,
+ HQty: 0,
+ HPrice: 0,
+ HMoney: 0,
+ HOrderPrice: 0,
+ HWHID: 0,
+ 璋冨叆浠撳簱: '',
+ HSCWHID: 0,
+ 璋冨嚭浠撳簱: '',
+ HBatchNo: '',
+ HRemark: ''
+ }
+ ],
+ selectedRows: [],
+ baseURL: process.env.VUE_APP_BASE_URL || 'http://47.96.97.237/API/'
+ }
+ },
+ computed: {
+ dialogTitle() {
+ return this.operationType === '1' ? '鏂板鍒嗘寮忚皟鍏ュ崟' : '缂栬緫鍒嗘寮忚皟鍏ュ崟'
+ }
+ },
+ watch: {
+ visible: {
+ immediate: true,
+ handler(val) {
+ this.dialogVisible = val
+ if (val) {
+ this.initForm()
+ }
+ }
+ }
+ },
+ methods: {
+ // 鍒濆鍖栬〃鍗�
+ initForm() {
+ console.log('褰撳墠鎿嶄綔绫诲瀷:', this.operationType)
+ if (this.operationType === '1') {
+ // 鏂板
+ this.resetForm()
+ this.getMaxBillNo()
+ this.form.HMaker = sessionStorage['HUserName'] || 'admin'
+ this.form.HMakeDate = this.formatDate(new Date())
+ this.form.HDate = this.formatDate(new Date())
+ } else if (this.operationType === '3' ) {
+ console.log('缂栬緫妯″紡锛屾棤涓籭d',this.linterid)
+ // 缂栬緫
+ this.loadBillData(this.linterid)
+ }
+ },
+
+ // 閲嶇疆琛ㄥ崟
+ resetForm() {
+ this.form = {
+ HInterID: 0,
+ HBillNo: '',
+ HDate: '',
+ HSourceBillType: '',
+ sourceBillNo: '',
+ HSupName: '',
+ HSupID: 0,
+ HEmpName: '',
+ HEmpID: 0,
+ HManagerName: '',
+ HManagerID: 0,
+ HWHName: '',
+ HWHID: 0,
+ HSCWHName: '',
+ HSCWHID: 0,
+ HSecManagerName: '',
+ HSecManagerID: 0,
+ HKeeperName: '',
+ HKeeperID: 0,
+ HDeptName: '',
+ HDeptID: 0,
+ HProNumber: '',
+ HProName: '',
+ HProjectID: 0,
+ HRemark: '',
+ HMaker: '',
+ HChecker: '',
+ HCloseMan: '',
+ HUpDater: '',
+ HDeleteMan: '',
+ HMakeDate: '',
+ HCheckDate: '',
+ HCloseDate: '',
+ HUpDateDate: '',
+ HDeleteDate: ''
+ }
+ this.tableData = [{
+ HMaterID: 0,
+ 鐗╂枡浠g爜: '',
+ 鐗╂枡鍚嶇О: '',
+ 瑙勬牸鍨嬪彿: '',
+ HUnitID: 0,
+ 璁¢噺鍗曚綅: '',
+ HSecUnitRate: '0',
+ HSecUnitID: '0',
+ 杈呭姪璁¢噺鍗曚綅: '',
+ HQtyMust: 0,
+ HQty: 0,
+ HPrice: 0,
+ HMoney: 0,
+ HOrderPrice: 0,
+ HWHID: 0,
+ 璋冨叆浠撳簱: '',
+ HSCWHID: 0,
+ 璋冨嚭浠撳簱: '',
+ HBatchNo: '',
+ HRemark: ''
+ }]
+ },
+
+ // 鑾峰彇鏈�澶у崟鎹彿
+ async getMaxBillNo() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Web/GetMAXNum`, {
+ params: { HBillType: '1251' }
+ })
+ if (response.data && response.data.data && response.data.data.length > 0) {
+ this.form.HBillNo = response.data.data[0].HBillNo
+ this.form.HInterID = response.data.data[0].HInterID
+ }
+ } catch (error) {
+ console.error('鑾峰彇鍗曟嵁鍙峰け璐�:', error)
+ this.$message.error('鑾峰彇鍗曟嵁鍙峰け璐�')
+ }
+ },
+
+ // 鍔犺浇鍗曟嵁鏁版嵁
+ async loadBillData(linterid) {
+ try {
+ const response = await axios.get(`${this.baseURL}/Kf_StepFoldInBill/cx`, {
+ params: { HInterID: linterid }
+ })
+ console.log('缂栬緫浼犲叆鐨勪富id:', linterid)
+ console.log('鍔犺浇鐨勫崟鎹暟鎹�:', response.data)
+ if (response.data.code == 1) {
+ const data = response.data.data[0]
+ console.log('鍗曟嵁澶存暟鎹�:', data)
+ Object.keys(this.form).forEach(key => {
+ if (data[key] !== undefined) {
+ this.form[key] = data[key]
+ }
+ })
+ this.form.HInterID = linterid;
+ this.HInterID=data.HInterID;
+ this.form.HBillNo = data.鍗曟嵁鍙�
+ this.form.HDate = data.鏃ユ湡
+ this.form.HSourceBillType = '鍒嗗竷寮忚皟鍏ュ崟'
+ this.form.sourceBillNo = data.婧愬崟鍙�
+ this.form.HSupName = data.渚涘簲鍟�
+ this.form.HSupID = data.HSupID
+ this.form.HEmpName = data.浠撶鍛�
+ this.form.HEmpID = data.HEmpID
+ this.form.HManagerName = data.璐熻矗浜�
+ this.form.HManagerID = data.HManagerID
+ this.form.HWHName = data.璋冨叆浠撳簱
+ this.form.HWHID = data.HWHID
+ this.form.HSCWHName = data.璋冨嚭浠撳簱
+ this.form.HSCWHID = data.HSCWHID
+ this.form.HSecManagerName = data.楠屾敹
+ this.form.HSecManagerID = data.HSecManagerID
+ this.form.HKeeperName = data.淇濈鍛�
+ this.form.HKeeperID = data.HKeeperID
+ this.form.HDeptName = data.閮ㄩ棬
+ this.form.HDeptID = data.HDeptID
+ this.form.HProNumber = data.椤圭洰浠g爜
+ this.form.HProName = data.椤圭洰鍚嶇О
+ this.form.HProjectID = data.HProjectID
+ this.form.HRemark = data.澶囨敞
+ this.form.HMaker = data.鍒跺崟浜�
+ this.form.HChecker = data.瀹℃牳浜�
+ this.form.HCloseMan = data.鍏抽棴浜�
+ this.form.HUpDater = data.淇敼浜�
+ this.form.HDeleteMan = data.浣滃簾浜�
+ this.form.HMakeDate = data.鍒跺崟鏃ユ湡
+ this.form.HCheckDate = data.瀹℃牳鏃ユ湡
+ this.form.HCloseDate = data.鍏抽棴鏃ユ湡
+ this.form.HUpDateDate = data.淇敼鏃ユ湡
+ this.form.HDeleteDate = data.浣滃簾鏃ユ湡
+
+
+ if (response.data.data.length > 0) {
+ this.tableData = response.data.data.map(item => ({
+ HMaterID: item.HMaterID,
+ 鐗╂枡浠g爜: item.鐗╂枡浠g爜,
+ 鐗╂枡鍚嶇О: item.鐗╂枡鍚嶇О,
+ 瑙勬牸鍨嬪彿: item.瑙勬牸鍨嬪彿,
+ HUnitID: item.HUnitID,
+ 璁¢噺鍗曚綅: item.璁¢噺鍗曚綅,
+ HQtyMust: item.搴旀敹鏁伴噺,
+ HQty: item.瀹炴敹鏁伴噺,
+ HPrice: item.鍗曚环,
+ HMoney: item.閲戦,
+ HOrderPrice: item.閲囪喘閲戦,
+ HWHID: item.HWHID,
+ 璋冨叆浠撳簱: item.璋冨叆浠撳簱,
+ HSCWHID: item.HSCWHID,
+ 璋冨嚭浠撳簱: item.璋冨嚭浠撳簱,
+ HBatchNo: item.鎵规,
+ HRemark: item.琛ㄤ綋澶囨敞
+ }))
+ }
+ } else {
+ this.$message.error(response.data.msg || '鍔犺浇鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鍔犺浇鍗曟嵁鏁版嵁澶辫触:', error)
+ this.$message.error('鍔犺浇鍗曟嵁鏁版嵁澶辫触')
+ }
+ },
+
+ // 閮ㄩ棬閫夋嫨
+ handleSelectDept() {
+ console.log('鎵撳紑閮ㄩ棬閫夋嫨')
+ this.deptVisible = true
+ },
+
+ // 璋冨叆浠撳簱閫夋嫨
+ handleSelectInWarehouse() {
+ console.log('鎵撳紑璋冨叆浠撳簱閫夋嫨')
+ this.warehouseType = 'HWH'
+ this.warehouseVisible = true
+ this.currentField = 'inWarehouse'
+ },
+
+ // 璋冨嚭浠撳簱閫夋嫨
+ handleSelectOutWarehouse() {
+ console.log('鎵撳紑璋冨叆浠撳簱閫夋嫨')
+ this.warehouseType = 'HSCWH'
+ this.warehouseVisible = true
+ this.currentField = 'outWarehouse'
+ },
+
+ // 閮ㄩ棬閫夋嫨鍥炶皟 - 鍗曞嚮
+ handleDeptSelect(selectedData) {
+ if (selectedData) {
+ this.form.HDeptName = selectedData.閮ㄩ棬鍚嶇О
+ this.form.HDeptID = selectedData.HItemID
+ this.deptVisible = false
+ }
+ },
+
+ // 閮ㄩ棬閫夋嫨鍥炶皟 - 鍙屽嚮
+ handleDeptSelectDb(selectedData) {
+ this.handleDeptSelect(selectedData)
+ },
+
+ // 浠撳簱閫夋嫨鍥炶皟 - 鍗曞嚮
+ handleWarehouseSelect(selectedData) {
+ if (selectedData) {
+ const warehouse = selectedData
+ if (this.currentField === 'inWarehouse') {
+ this.form.HWHName = warehouse.浠撳簱鍚嶇О
+ this.form.HWHID = warehouse.HItemID
+ } else if (this.currentField === 'outWarehouse') {
+ this.form.HSCWHName = warehouse.浠撳簱鍚嶇О
+ this.form.HSCWHID = warehouse.HItemID
+ } else if (this.currentField === 'tableInWarehouse') {
+ this.tableData[this.currentRowIndex].璋冨叆浠撳簱 = warehouse.浠撳簱鍚嶇О
+ this.tableData[this.currentRowIndex].HWHID = warehouse.HItemID
+ } else if (this.currentField === 'tableOutWarehouse') {
+ this.tableData[this.currentRowIndex].璋冨嚭浠撳簱 = warehouse.浠撳簱鍚嶇О
+ this.tableData[this.currentRowIndex].HSCWHID = warehouse.HItemID
+ }
+ this.warehouseVisible = false
+ // 閲嶇疆褰撳墠閫夋嫨
+ this.currentRowIndex = null
+ this.currentField = ''
+ }
+ },
+
+ // 浠撳簱閫夋嫨鍥炶皟 - 鍙屽嚮
+ handleWarehouseSelectDb(selectedData) {
+ this.handleWarehouseSelect(selectedData)
+ },
+
+ // 琛ㄦ牸琛屼粨搴撻�夋嫨
+ handleInWarehouseFocus(index, row) {
+ this.currentRowIndex = index
+ this.warehouseType = 'HWH'
+ this.warehouseVisible = true
+ this.currentField = 'tableInWarehouse'
+ },
+
+ handleOutWarehouseFocus(index, row) {
+ this.currentRowIndex = index
+ this.warehouseType = 'HSCWH'
+ this.warehouseVisible = true
+ this.currentField = 'tableOutWarehouse'
+ },
+ showSupplierDialog() {
+ this.currentDialogType = 'supplier'
+ this.supplierDialogVisible = true
+ },
+ // 鏄剧ず鑱屽憳寮圭獥
+ showEmployeeDialog(type) {
+ this.currentDialogType = type
+ const titleMap = {
+ keeper: '閫夋嫨淇濈鍛�',
+ inspector: '閫夋嫨楠屾敹鍛�',
+ manager: '閫夋嫨璐熻矗浜�',
+ worker: '閫夋嫨璐熻矗浜�',
+ Employee: '閫夋嫨浠撶鍛�'
+ }
+ this.employeeDialogTitle = titleMap[type] || '閫夋嫨鑱屽憳'
+ this.employeeDialogVisible = true
+ },
+ handleEmployeeSelect(data, type) {
+ const fieldMap = {
+ keeper: { id: 'HkeeperId', name: 'HkeeperName' },
+ inspector: { id: 'HSecManagerID', name: 'HSecManagerName' },
+ manager: { id: 'HManagerID', name: 'HManagerName' },
+ Employee: { id: 'HEmpID', name: 'HEmpName' }
+ }
+
+ const field = fieldMap[type]
+ if (field) {
+ this.form[field.id] = data.HItemID
+ this.form[field.name] = data.鑱屽憳鍚嶇О || data.鑱屽憳浠g爜
+ }
+ console.log(`閫夋嫨鐨�${type}:`, data)
+ },
+
+
+ handleSupplierSelect(data, type) {
+ this.form.HSupID = data.HItemID
+ this.form.HSupName = data.渚涘簲鍟嗗悕绉� || data.渚涘簲鍟嗕唬鐮�
+ console.log('閫夋嫨鐨勪緵搴斿晢:', data)
+ },
+
+
+ // 琛ㄦ牸鎿嶄綔
+ handleAddLine() {
+ this.tableData.push({
+ HMaterID: 0,
+ 鐗╂枡浠g爜: '',
+ 鐗╂枡鍚嶇О: '',
+ 瑙勬牸鍨嬪彿: '',
+ HUnitID: 0,
+ 璁¢噺鍗曚綅: '',
+ HSecUnitRate: '0',
+ HSecUnitID: '0',
+ 杈呭姪璁¢噺鍗曚綅: '',
+ HQtyMust: 0,
+ HQty: 0,
+ HPrice: 0,
+ HMoney: 0,
+ HOrderPrice: 0,
+ HWHID: 0,
+ 璋冨叆浠撳簱: '',
+ HSCWHID: 0,
+ 璋冨嚭浠撳簱: '',
+ HBatchNo: '',
+ HRemark: ''
+ })
+ },
+
+ handleCopyLine() {
+ if (this.selectedRows.length === 1) {
+ const copyData = JSON.parse(JSON.stringify(this.selectedRows[0]))
+ this.tableData.push(copyData)
+ } else {
+ this.$message.warning('璇烽�夋嫨涓�琛屾暟鎹繘琛屽鍒�')
+ }
+ },
+
+ handleDeleteLine(index) {
+ if (this.tableData.length > 1) {
+ this.tableData.splice(index, 1)
+ } else {
+ this.$message.warning('鑷冲皯淇濈暀涓�琛屾暟鎹�')
+ }
+ },
+
+ handleSelectionChange(selection) {
+ this.selectedRows = selection
+ },
+
+ handleInventoryQuery() {
+ this.$message.info('搴撳瓨鏌ヨ鍔熻兘寰呭疄鐜�')
+ },
+
+ handleInOutQuery() {
+ this.$message.info('鍑哄叆搴撹褰曟煡璇㈠姛鑳藉緟瀹炵幇')
+ },
+
+ // 淇濆瓨
+ async handleSave() {
+ try {
+ await this.$refs.form.validate()
+ // 纭繚鍏抽敭瀛楁鏈夊��
+ if (!this.form.HWHID || this.form.HWHID === 0) {
+ this.$message.error('璇烽�夋嫨璋冨叆浠撳簱')
+ return
+ }
+ if (!this.form.HSCWHID || this.form.HSCWHID === 0) {
+ this.$message.error('璇烽�夋嫨璋冨嚭浠撳簱')
+ return
+ }
+ if (!this.form.HDeptID || this.form.HDeptID === 0) {
+ this.$message.error('璇烽�夋嫨閮ㄩ棬')
+ return
+ }
+
+ // 纭繚琛ㄦ牸鏁版嵁涓殑浠撳簱ID涔熸湁鍊�
+ const hasValidTableData = this.tableData.every(row =>
+ row.HMaterID && row.HMaterID !== 0 &&
+ row.HUnitID && row.HUnitID !== 0
+ )
+
+ if (!hasValidTableData) {
+ // this.$message.error('璇峰畬鍠勮〃鏍间腑鐨勭墿鏂欏拰鍗曚綅淇℃伅')
+ // return
+ this.tableData=[];
+ }
+ // const formData = {
+ // mainData: JSON.stringify([this.form]), // 涓昏〃鏁版嵁锛屽寘瑁呮垚鏁扮粍
+ // tableData: JSON.stringify(this.tableData), // 瀛愯〃鏁版嵁
+ // operationType: this.operationType,
+ // user: sessionStorage['HUserName'] || 'admin',
+ // allData: JSON.stringify({ // 涓昏〃+瀛愯〃鎵�鏈夋暟鎹�
+ // main: this.form,
+ // table: this.tableData
+ // })
+ // }
+ //const formData=JSON.stringify(this.form)+';'+JSON.stringify(this.tableData)+';'+this.operationType+';'+(sessionStorage['HUserName'] || 'admin');
+ const submitData =
+ JSON.stringify(this.form) + ';' +
+ JSON.stringify(this.tableData) + ';' +
+ this.operationType + ';' +
+ (sessionStorage['HUserName'] || 'admin') + ';' +
+ JSON.stringify({ main: this.form, table: this.tableData })
+ console.log('鎻愪氦鐨勫畬鏁存暟鎹�:', submitData)
+
+ const response = await axios.post(`${this.baseURL}/Kf_StepFoldInBill/Kf_StepFoldInBillEdit`, {
+ sMainSub: submitData
+ })
+
+ if (response.data && response.data.count === 1) {
+ this.$message.success(response.data.Message || '淇濆瓨鎴愬姛')
+ this.handleClose()
+ this.$emit('saved')
+ } else {
+ this.$message.error(response.data.Message || '淇濆瓨澶辫触')
+ }
+ } catch (error) {
+ console.error('淇濆瓨澶辫触:', error)
+ if (error.response && error.response.data) {
+ this.$message.error(error.response.data.Message || '淇濆瓨澶辫触')
+ } else {
+ this.$message.error('淇濆瓨澶辫触')
+ }
+ }
+ },
+
+ // 鍏抽棴
+ handleClose() {
+ this.dialogVisible = false
+ this.$emit('update:visible', false)
+ this.$emit('closed')
+ },
+
+ // 宸ュ叿鏂规硶
+ formatDate(date) {
+ if (!date) return ''
+ const d = new Date(date)
+ const year = d.getFullYear()
+ const month = String(d.getMonth() + 1).padStart(2, '0')
+ const day = String(d.getDate()).padStart(2, '0')
+ return `${year}-${month}-${day}`
+ }
+ }
+}
+</script>
+
+<style scoped>
+.app-container {
+ padding: 0;
+}
+
+.dialog-footer {
+ text-align: center;
+ padding: 20px 0 0;
+}
+
+.table-section {
+ margin-top: 20px;
+ border: 1px solid #e6ebf5;
+ border-radius: 4px;
+ padding: 10px;
+}
+
+.table-toolbar {
+ margin-bottom: 10px;
+}
+
+.el-form-item {
+ margin-bottom: 18px;
+}
+
+.el-tabs {
+ margin-top: -20px;
+}
+
+.el-table {
+ margin-top: 10px;
+}
+
+.el-input-number {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/GyCustomer/CustomerEdit/index.vue b/src/views/GyCustomer/CustomerEdit/index.vue
new file mode 100644
index 0000000..c5f1c65
--- /dev/null
+++ b/src/views/GyCustomer/CustomerEdit/index.vue
@@ -0,0 +1,898 @@
+<template>
+ <div class="customer-edit">
+ <el-dialog
+ :title="dialogTitle"
+ :visible.sync="openEdit"
+ width="1480px"
+ append-to-body
+ class="customerBox"
+ :before-close="handleClose"
+ :close-on-click-modal="false"
+ >
+ <div class="dialog-content">
+ <el-card style="margin-bottom: 10px;">
+ <div class="card-header">
+ <el-button-group>
+ <el-button type="primary" @click="handleSave" :disabled="saveDisabled">淇濆瓨</el-button>
+ <el-button type="primary" @click="handleAudit" :disabled="auditDisabled">瀹℃牳</el-button>
+ <el-button type="primary" @click="handleExit">閫�鍑�</el-button>
+ </el-button-group>
+ </div>
+ </el-card>
+
+ <el-card>
+ <div class="card-body">
+ <h1 style="text-align:center;margin-bottom:20px;"><b>瀹㈡埛璧勬枡</b></h1>
+
+ <el-tabs v-model="activeTab" type="card">
+ <el-tab-pane label="鍩烘湰淇℃伅" name="basic">
+ <el-form ref="form" :model="formData" label-width="100px" :rules="rules">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="瀹㈡埛浠g爜" prop="HNumber">
+ <el-input
+ v-model="formData.HNumber"
+ placeholder="璇疯緭鍏ュ鎴蜂唬鐮�"
+ :readonly="operationType === 3"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹㈡埛鍚嶇О" prop="HName">
+ <el-input v-model="formData.HName" placeholder="璇疯緭鍏ュ鎴峰悕绉�"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鍔╄鐮�">
+ <el-input v-model="formData.HHelpCode" placeholder="璇疯緭鍏ュ姪璁扮爜"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="绠�绉�">
+ <el-input v-model="formData.HShortName" placeholder="璇疯緭鍏ョ畝绉�"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="绂佺敤鏍囧織">
+ <el-checkbox v-model="formData.HStopflag"></el-checkbox>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="澶囨敞">
+ <el-input v-model="formData.HRemark" placeholder="璇疯緭鍏ュ娉�"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="棰嗙敤浜�">
+ <el-input v-model="formData.HMateOutEmp" placeholder="璇疯緭鍏ラ鐢ㄤ汉"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍒涘缓缁勭粐" prop="HCreateOrgID">
+ <el-select
+ v-model="formData.HCreateOrgID"
+ placeholder="璇烽�夋嫨鍒涘缓缁勭粐"
+ :disabled="operationType !== 1"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="org in organizationList"
+ :key="org.ID"
+ :label="org.Name"
+ :value="org.ID"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="浣跨敤缁勭粐" prop="HUSEORGID">
+ <el-select
+ v-model="formData.HUSEORGID"
+ placeholder="璇烽�夋嫨浣跨敤缁勭粐"
+ :disabled="operationType !== 1"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="org in organizationList"
+ :key="org.ID"
+ :label="org.Name"
+ :value="org.ID"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </el-tab-pane>
+
+
+ <el-tab-pane label="鍏朵粬淇℃伅" name="other">
+ <el-form ref="formOther" :model="formData" label-width="100px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鑱旂郴浜�">
+ <el-input v-model="formData.HLinkMan" placeholder="璇疯緭鍏ヨ仈绯讳汉"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑱旂郴鐢佃瘽">
+ <el-input v-model="formData.HLinkPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎵嬫満">
+ <el-input v-model="formData.HMobilePhone" placeholder="璇疯緭鍏ユ墜鏈�"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浼犵湡">
+ <el-input v-model="formData.HFax" placeholder="璇疯緭鍏ヤ紶鐪�"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鍦板潃">
+ <el-input v-model="formData.HAddress" placeholder="璇疯緭鍏ュ湴鍧�"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閭紪">
+ <el-input v-model="formData.HPostalCode" placeholder="璇疯緭鍏ラ偖缂�"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鐢靛瓙閭">
+ <el-input v-model="formData.HEmail" placeholder="璇疯緭鍏ョ數瀛愰偖绠�"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="娉曚汉浠h〃">
+ <el-input v-model="formData.HCorMan" placeholder="璇疯緭鍏ユ硶浜轰唬琛�"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="寮�鎴烽摱琛�">
+ <el-input v-model="formData.HBank" placeholder="璇疯緭鍏ュ紑鎴烽摱琛�"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閾惰璐﹀彿">
+ <el-input v-model="formData.HBankAccount" placeholder="璇疯緭鍏ラ摱琛岃处鍙�"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="绋庡姟鐧昏鍙�">
+ <el-input v-model="formData.HTaxNum" placeholder="璇疯緭鍏ョ◣鍔$櫥璁板彿"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="澧炲�肩◣鐜�">
+ <el-input v-model="formData.HTaxRate" placeholder="璇疯緭鍏ュ鍊肩◣鐜�" value="0">
+ <template slot="append">%</template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鑻辨枃鍚嶇О">
+ <el-input v-model="formData.HEnglishName" placeholder="璇疯緭鍏ヨ嫳鏂囧悕绉�"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑻辨枃鍦板潃">
+ <el-input v-model="formData.HEnglishAddress" placeholder="璇疯緭鍏ヨ嫳鏂囧湴鍧�"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鍥藉">
+ <el-input v-model="formData.HCountry" placeholder="璇疯緭鍏ュ浗瀹�"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍦板尯">
+ <el-input
+ v-model="formData.HAreaName"
+ placeholder="璇烽�夋嫨鍦板尯"
+ readonly
+ style="width: calc(100% - 50px)"
+ >
+ </el-input>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ style="margin-left: 10px;"
+ @click="openAreaDialog"
+ ></el-button>
+ <el-input type="hidden" v-model="formData.HAreaID"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="榛樿璐у竵">
+ <el-input
+ v-model="formData.HCurName"
+ placeholder="璇烽�夋嫨榛樿璐у竵"
+ readonly
+ style="width: calc(100% - 50px)"
+ >
+ </el-input>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ style="margin-left: 10px;"
+ @click="openCurrencyDialog"
+ ></el-button>
+ <el-input type="hidden" v-model="formData.HCurID"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="缁撶畻鏂瑰紡">
+ <el-input
+ v-model="formData.HSSName"
+ placeholder="璇烽�夋嫨缁撶畻鏂瑰紡"
+ readonly
+ style="width: calc(100% - 50px)"
+ >
+ </el-input>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ style="margin-left: 10px;"
+ @click="openSettleStyleDialog"
+ ></el-button>
+ <el-input type="hidden" v-model="formData.HSSID"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="瀹㈡埛鐘舵��">
+ <el-select v-model="formData.HCusStatus" placeholder="璇烽�夋嫨瀹㈡埛鐘舵��" style="width: 100%">
+ <el-option label="娼滃湪" value="101"></el-option>
+ <el-option label="鍚堟牸" value="102"></el-option>
+ <el-option label="鏆傛椂" value="103"></el-option>
+ <el-option label="棰勮" value="104"></el-option>
+ <el-option label="榛戝悕鍗�" value="105"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹㈡埛鍒嗙被">
+ <el-input
+ v-model="formData.HCusTypeName"
+ placeholder="璇烽�夋嫨瀹㈡埛鍒嗙被"
+ readonly
+ style="width: calc(100% - 50px)"
+ >
+ </el-input>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ style="margin-left: 10px;"
+ @click="openCustomerTypeDialog"
+ ></el-button>
+ <el-input type="hidden" v-model="formData.HCusTypeID"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </el-tab-pane>
+
+ <el-tab-pane label="绯荤粺淇℃伅" name="system">
+ <el-form :model="formData" label-width="100px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鍒涘缓浜�">
+ <el-input v-model="formData.HCreator" readonly></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍒涘缓鏃ユ湡">
+ <el-input v-model="formData.HCreateDate" readonly></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="淇敼浜�">
+ <el-input v-model="formData.HUpDater" readonly></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="淇敼鏃ユ湡">
+ <el-input v-model="formData.HUpDateDate" readonly></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳浜�">
+ <el-input v-model="formData.HChecker" readonly></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳鏃ユ湡">
+ <el-input v-model="formData.HCheckDate" readonly></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="浣滃簾浜�">
+ <el-input v-model="formData.HDeleteMan" readonly></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浣滃簾鏃ユ湡">
+ <el-input v-model="formData.HDeleteDate" readonly></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </el-card>
+ </div>
+
+
+ <!-- 鍦板尯tanchuang -->
+ <AreaDialog
+ :visible.sync="areaDialogVisible"
+ @selected="handleAreaSelected"
+ />
+
+
+ <!-- 璐у竵tanchuang -->
+ <CurrencyDialog
+ :visible.sync="currencyDialogVisible"
+ @selected="handleCurrencySelected"
+ />
+
+ <!-- 缁撶畻鏂瑰紡tanchuang -->
+ <SettleStyleDialog
+ :visible.sync="settleStyleDialogVisible"
+ @selected="handleSettleStyleSelected"
+ />
+
+ <!-- 瀹㈡埛鍒嗙被tanchuang -->
+ <CustomerTypeDialog
+ :visible.sync="customerTypeDialogVisible"
+ @selected="handleCustomerTypeSelected"
+ />
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import axios from 'axios'
+import AreaDialog from "@/views/component/AreaDialog"
+import CurrencyDialog from "@/views/component/CurrencyDialog"
+import SettleStyleDialog from '@/views/component/SettleStyleDialog'
+import CustomerTypeDialog from '@/views/component/CustomerTypeDialog'
+
+export default {
+ name: 'CustomerEdit',
+ components: {
+ AreaDialog,
+ CurrencyDialog,
+ SettleStyleDialog,
+ CustomerTypeDialog
+ },
+ props: {
+ OperationType: { // 1:鏂板 2:娴佹按鍙锋柊澧� 3:缂栬緫 6:澶嶅埗
+ type: Number,
+ default: 1
+ },
+ linterid: {
+ type: [String, Number],
+ default: ''
+ },
+ HSouceBillType: {
+ type: String,
+ default: ''
+ },
+ HCusTypeID: {
+ type: [String, Number],
+ default: '0'
+ },
+ HCusClsName: {
+ type: String,
+ default: ''
+ }
+ },
+ data() {
+ return {
+ openEdit: true,
+ activeTab: 'basic',
+
+ // 琛ㄥ崟鏁版嵁
+ formData: {
+ HNumber: '',
+ HName: '',
+ HHelpCode: '',
+ HShortName: '',
+ HStopflag: false,
+ HRemark: '',
+ HMateOutEmp: '',
+ HCreateOrgID: '',
+ HUSEORGID: '',
+
+ // 鍏朵粬淇℃伅
+ HLinkMan: '',
+ HLinkPhone: '',
+ HMobilePhone: '',
+ HFax: '',
+ HAddress: '',
+ HPostalCode: '',
+ HEmail: '',
+ HCorMan: '',
+ HBank: '',
+ HBankAccount: '',
+ HTaxNum: '',
+ HTaxRate: '0',
+ HEnglishName: '',
+ HEnglishAddress: '',
+ HCountry: '',
+ HAreaName: '',
+ HAreaID: '0',
+ HCurName: '',
+ HCurID: '0',
+ HSSName: '',
+ HSSID: '0',
+ HCusStatus: '',
+ HCusTypeName: '',
+ HCusTypeID: '0',
+
+ // 绯荤粺淇℃伅
+ HCreator: '',
+ HCreateDate: '',
+ HUpDater: '',
+ HUpDateDate: '',
+ HChecker: '',
+ HCheckDate: '',
+ HDeleteMan: '',
+ HDeleteDate: ''
+ },
+
+ // 楠岃瘉
+ rules: {
+ HNumber: [
+ { required: true, message: '璇疯緭鍏ュ鎴蜂唬鐮�', trigger: 'blur' }
+ ],
+ HName: [
+ { required: true, message: '璇疯緭鍏ュ鎴峰悕绉�', trigger: 'blur' }
+ ],
+ HCreateOrgID: [
+ { required: true, message: '璇烽�夋嫨鍒涘缓缁勭粐', trigger: 'change' }
+ ],
+ HUSEORGID: [
+ { required: true, message: '璇烽�夋嫨浣跨敤缁勭粐', trigger: 'change' }
+ ]
+ },
+
+ organizationList: [],
+
+
+ areaDialogVisible: false,
+ currencyDialogVisible: false,
+ settleStyleDialogVisible: false,
+ customerTypeDialogVisible: false,
+
+ saveDisabled: false,
+ auditDisabled: false,
+
+ baseURL: process.env.VUE_APP_BASE_URL || 'http://47.96.97.237/API/',
+ user: 'admin'
+ }
+ },
+ computed: {
+ dialogTitle() {
+ const titles = {
+ 1: '鏂板瀹㈡埛',
+ 2: '娴佹按鍙锋柊澧炲鎴�',
+ 3: '缂栬緫瀹㈡埛',
+ 6: '澶嶅埗瀹㈡埛'
+ }
+ return titles[this.OperationType] || '瀹㈡埛璧勬枡'
+ },
+ operationType() {
+ return this.OperationType
+ }
+ },
+ watch: {
+ openEdit(val) {
+ if (!val) {
+ this.$emit('editClose', false)
+ }
+ }
+ },
+ mounted() {
+ this.initData()
+ this.loadOrganizations()
+ this.handleOperationType()
+ },
+ methods: {
+ initData() {
+ this.formData.HCreator = this.user
+ this.formData.HCreateDate = new Date().toLocaleString()
+ },
+
+ loadOrganizations() {
+ axios.get(`${this.baseURL}/Web/GetOrganizations`)
+ .then(response => {
+ if (response.data.count === 1) {
+ this.organizationList = response.data.data
+ const defaultOrg = this.organizationList[0]
+ if (defaultOrg) {
+ this.formData.HCreateOrgID = defaultOrg.ID
+ this.formData.HUSEORGID = defaultOrg.ID
+ }
+ }
+ })
+ .catch(error => {
+ this.$modal.msgError('鍔犺浇缁勭粐鏁版嵁澶辫触!')
+ })
+ },
+
+ handleOperationType() {
+ switch (this.operationType) {
+ case 1: // 鏂板
+ this.handleAddNew()
+ break
+ case 2: // 娴佹按鍙锋柊澧�
+ this.handleSerialAdd()
+ break
+ case 3: // 缂栬緫
+ this.handleEdit()
+ break
+ case 6: // 澶嶅埗
+ this.handleCopy()
+ break
+ }
+ },
+
+
+ handleAddNew() {
+ this.auditDisabled = true
+ this.getMaxBillID()
+ },
+
+
+ handleSerialAdd() {
+ this.formData.HCusTypeName = this.HCusClsName
+ this.formData.HCusTypeID = this.HCusTypeID
+ this.setHNumber(this.HCusTypeID)
+ this.auditDisabled = true
+ },
+
+
+ handleEdit() {
+ this.loadEditData(this.linterid)
+ },
+
+
+ handleCopy() {
+ this.loadEditData(this.linterid)
+ this.auditDisabled = true
+ },
+
+
+ getMaxBillID() {
+ axios.get(`${this.baseURL}/Gy_Customer/GetMAXBillID`)
+ .then(response => {
+ console.log('Max Bill ID:', response.data)
+ })
+ .catch(error => {
+ console.error('鑾峰彇鏈�澶у崟鎹甀D澶辫触:', error)
+ })
+ },
+
+ // 璁剧疆娴佹按鍙�
+ setHNumber(typeID) {
+ axios.get(`${this.baseURL}/Gy_Customer/getMaxNum`, {
+ params: {
+ HCusTypeID: typeID,
+ user: this.user,
+ Organization: '100038'
+ }
+ })
+ .then(response => {
+ if (response.data.data) {
+ this.formData.HNumber = response.data.data
+ }
+ })
+ .catch(error => {
+ this.$modal.msgError('鑾峰彇娴佹按鍙峰け璐�!')
+ })
+ },
+
+ loadEditData(interId) {
+ axios.get(`${this.baseURL}/Gy_Customer/xg_extendCheckEmp`, {
+ params: { HInterID: interId }
+ })
+ .then(response => {
+ if (response.data.data && response.data.data.length > 0) {
+ const data = response.data.data[0]
+ this.populateFormData(data)
+
+ if (data.瀹℃牳浜� && data.瀹℃牳浜� !== '') {
+ this.saveDisabled = true
+ this.auditDisabled = true
+ }
+ }
+ })
+ .catch(error => {
+ this.$modal.msgError('鍔犺浇瀹㈡埛鏁版嵁澶辫触!')
+ })
+ },
+
+
+ populateFormData(data) {
+ this.formData = {
+ ...this.formData,
+ HNumber: data.瀹㈡埛浠g爜 || '',
+ HName: data.瀹㈡埛鍚嶇О || '',
+ HHelpCode: data.鍔╄鐮� || '',
+ HShortName: data.绠�绉� || '',
+ HStopflag: data.绂佺敤鏍囧織 || false,
+ HRemark: data.澶囨敞 || '',
+ HMateOutEmp: data.棰嗙敤浜� || '',
+ HLinkMan: data.鑱旂郴浜� || '',
+ HLinkPhone: data.鑱旂郴鐢佃瘽 || '',
+ HMobilePhone: data.鎵嬫満 || '',
+ HFax: data.浼犵湡 || '',
+ HAddress: data.鍦板潃 || '',
+ HPostalCode: data.閭紪 || '',
+ HEmail: data.鐢靛瓙閭欢 || '',
+ HCorMan: data.娉曚汉浠h〃 || '',
+ HBank: data.寮�鎴烽摱琛� || '',
+ HBankAccount: data.閾惰璐﹀彿 || '',
+ HTaxNum: data.绋庡姟鐧昏鍙� || '',
+ HTaxRate: data.澧炲�肩◣鐜� || '0',
+ HEnglishName: data.鑻辨枃鍚嶇О || '',
+ HEnglishAddress: data.鑻辨枃鍦板潃 || '',
+ HCountry: data.鍥藉 || '',
+ HAreaName: data.鍦板尯鍚嶇О || '',
+ HAreaID: data.鍦板尯ID || '0',
+ HCurName: data.榛樿璐у竵 || '',
+ HCurID: data.榛樿璐у竵ID || '0',
+ HSSName: data.缁撶畻鏂瑰紡 || '',
+ HSSID: data.缁撶畻鏂瑰紡ID || '0',
+ HCusStatus: data.瀹㈡埛鐘舵�� || '',
+ HCusTypeName: data.瀹㈡埛鍒嗙被 || '',
+ HCusTypeID: data.瀹㈡埛鍒嗙被ID || '0',
+ HChecker: data.瀹℃牳浜� || '',
+ HCheckDate: data.瀹℃牳鏃ユ湡 || ''
+ }
+
+ this.formData.HUpDater = this.user
+ this.formData.HUpDateDate = new Date().toLocaleString()
+ },
+
+ // 淇濆瓨
+ handleSave() {
+ this.$refs.form.validate(valid => {
+ if (valid) {
+ if (!this.validateForm()) {
+ return
+ }
+
+ const formData = { ...this.formData }
+ formData.HStopflag = formData.HStopflag ? 'true' : 'false'
+
+ let url = `${this.baseURL}/Gy_Customer/AddBill`
+ let params = { oMain: JSON.stringify(formData) + ';' + this.user }
+
+ if (this.operationType === 3) {
+ // 缂栬緫淇濆瓨
+ url = `${this.baseURL}/Gy_Customer/AddBill1`
+ params = {
+ oMain: JSON.stringify(formData) + ';' + this.linterid + ';' + this.user + ';Gy_Customer_Edit'
+ }
+ }
+
+ axios.post(url, params)
+ .then(response => {
+ if (response.data.count === 1) {
+ this.$modal.msgSuccess(response.data.Message)
+ this.saveDisabled = true
+ this.saveConfig()
+ this.openEdit = false
+ this.$emit('editClose', true)
+ } else {
+ this.$modal.msgError(response.data.Message)
+ }
+ })
+ .catch(error => {
+ this.$modal.msgError('淇濆瓨澶辫触!')
+ })
+ }
+ })
+ },
+
+ // 琛ㄥ崟楠岃瘉
+ validateForm() {
+ if (!this.formData.HNumber) {
+ this.$modal.msgWarning('璇疯緭鍏ュ鎴蜂唬鐮�!')
+ return false
+ }
+
+ if (!this.formData.HName) {
+ this.$modal.msgWarning('璇疯緭鍏ュ鎴峰悕绉�!')
+ return false
+ }
+
+ // 澧炲�肩◣鐜囬獙璇�
+ const taxRate = this.formData.HTaxRate
+ // if (taxRate && taxRate.substring(taxRate.length - 1) === '.') {
+ // this.$modal.msgWarning('澧炲�肩◣鐜囩殑缁撳熬涓嶈兘鏄�.!')
+ // return false
+ // }
+
+ if (taxRate && !/^[0-9]+\.?[0-9]*$/.test(taxRate)) {
+ this.$modal.msgWarning('澧炲�肩◣鐜囪杈撳叆姝g‘鏁板瓧!')
+ return false
+ }
+
+ return true
+ },
+
+ // 瀹℃牳
+ handleAudit() {
+ axios.get(`${this.baseURL}/Gy_Customer/AuditGy_Customer`, {
+ params: {
+ HInterID: this.linterid,
+ IsAudit: 0,
+ CurUserName: this.user
+ }
+ })
+ .then(response => {
+ if (response.data.count === 1) {
+ this.$modal.msgSuccess(response.data.Message)
+ this.openEdit = false
+ this.$emit('editClose', true)
+ } else {
+ this.$modal.msgError(response.data.Message)
+ }
+ })
+ .catch(error => {
+ this.$modal.msgError('瀹℃牳澶辫触!')
+ })
+ },
+
+ // 閫�鍑�
+ handleExit() {
+ this.openEdit = false
+ this.$emit('editClose', false)
+ },
+
+ // 鍏抽棴瀵硅瘽妗�
+ handleClose(done) {
+ this.$confirm('纭鍏抽棴锛�')
+ .then(_ => {
+ done()
+ this.$emit('editClose', false)
+ })
+ .catch(_ => {})
+ },
+
+ // 淇濆瓨閰嶇疆
+ saveConfig() {
+ const config = {
+ HSSID: this.formData.HSSID,
+ HSSName: this.formData.HSSName,
+ HCurID: this.formData.HCurID,
+ HCurName: this.formData.HCurName
+ }
+ localStorage.setItem('Gy_Customer_Edit', JSON.stringify(config))
+ },
+
+ // 鎵撳紑瀵硅瘽妗嗘柟娉�
+ openAreaDialog() {
+ this.areaDialogVisible = true
+ },
+
+ openCurrencyDialog() {
+ this.currencyDialogVisible = true
+ },
+
+ openSettleStyleDialog() {
+ this.settleStyleDialogVisible = true
+ },
+
+ openCustomerTypeDialog() {
+ this.customerTypeDialogVisible = true
+ },
+
+ // 瀵硅瘽妗嗛�夋嫨鍥炶皟
+ handleAreaSelected(data) {
+ this.formData.HAreaName = data.鍦板尯鍚嶇О
+ this.formData.HAreaID = data.HItemID
+ },
+
+ handleCurrencySelected(data) {
+ this.formData.HCurName = data.璐у竵鍚嶇О
+ this.formData.HCurID = data.HItemID
+ },
+
+ handleSettleStyleSelected(data) {
+ this.formData.HSSName = data.缁撶畻鏂瑰紡鍚嶇О
+ this.formData.HSSID = data.HItemID
+ },
+
+ handleCustomerTypeSelected(data) {
+ this.formData.HCusTypeName = data.瀹㈡埛鍒嗙被鍚嶇О
+ this.formData.HCusTypeID = data.HItemID
+ }
+ }
+}
+</script>
+
+<style scoped>
+.customerBox .el-date-editor.el-input {
+ width: 100%;
+}
+
+.dialog-content {
+ padding: 0;
+}
+
+.card-header {
+ padding: 10px 0;
+ border-bottom: 1px solid #ebeef5;
+}
+
+.card-body {
+ padding: 20px;
+}
+
+.el-form-item {
+ margin-bottom: 15px;
+}
+
+.el-tabs {
+ margin-top: 10px;
+}
+
+.el-button-group {
+ margin-bottom: 10px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/GyCustomer/index.vue b/src/views/GyCustomer/index.vue
new file mode 100644
index 0000000..40d5efa
--- /dev/null
+++ b/src/views/GyCustomer/index.vue
@@ -0,0 +1,1217 @@
+<template>
+ <div style="padding: 10px">
+ <el-card style="margin-bottom: 10px;">
+ <el-form :inline="true" :model="queryParams" ref="queryForm" class="mb8">
+ <el-form-item label="瀹㈡埛浠g爜" prop="HNumber">
+ <el-input
+ v-model="queryParams.HNumber"
+ placeholder="璇疯緭鍏ュ鎴蜂唬鐮�"
+ style="width: 160px"
+ />
+ </el-form-item>
+ <el-form-item label="瀹㈡埛鍚嶇О" prop="HName">
+ <el-input
+ v-model="queryParams.HName"
+ placeholder="璇疯緭鍏ュ鎴峰悕绉�"
+ style="width: 160px"
+ />
+ </el-form-item>
+ <el-form-item label="閲嶆柊鍚屾">
+ <el-input
+ v-model="queryParams.HNumber2"
+ placeholder="璇疯緭鍏ュ鎴蜂唬鐮�"
+ style="width: 160px"
+ />
+ <el-button type="primary" @click="handleResCnz" style="margin-left: 10px">閲嶆柊鍚屾</el-button>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" @click="handleQuery">鎼滅储</el-button>
+ <el-button @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ </el-form>
+
+ <el-form :model="queryParams" ref="filterForm">
+ <el-collapse v-model="activeCollapse" class="filter-collapse">
+ <el-collapse-item title="鏇村" name="more">
+
+ <el-card class="box-card" style="margin-top: 20px;">
+ <div slot="header" class="clearfix"><span>杩囨护</span></div>
+ <div>
+ <el-form-item label-width="0">
+ <el-row>
+ <el-col :span="7">
+ <el-select
+ v-model="queryParams.ColName"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in visibleColumns"
+ :key="index"
+ :label="item.title"
+ :value="item.field"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="6" style="padding: 0 10px">
+ <el-select
+ v-model="queryParams.Comparator"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in comparatorList"
+ :key="index"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="11">
+ <el-input
+ v-model="queryParams.ColContent"
+ placeholder="璇疯緭鍏�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-col>
+ </el-row>
+ </el-form-item>
+ <el-form-item label-width="0">
+ <el-row>
+ <el-col :span="7">
+ <el-select
+ v-model="queryParams.ColName1"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in visibleColumns"
+ :key="index"
+ :label="item.title"
+ :value="item.field"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="6" style="padding: 0 10px">
+ <el-select
+ v-model="queryParams.Comparator1"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in comparatorList"
+ :key="index"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="11">
+ <el-input
+ v-model="queryParams.ColContent1"
+ placeholder="璇疯緭鍏�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-col>
+ </el-row>
+ </el-form-item>
+ <el-form-item label-width="0">
+ <el-row>
+ <el-col :span="7">
+ <el-select
+ v-model="queryParams.ColName2"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in visibleColumns"
+ :key="index"
+ :label="item.title"
+ :value="item.field"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="6" style="padding: 0 10px">
+ <el-select
+ v-model="queryParams.Comparator2"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in comparatorList"
+ :key="index"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="11">
+ <el-input
+ v-model="queryParams.ColContent2"
+ placeholder="璇疯緭鍏�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-col>
+ </el-row>
+ </el-form-item>
+ </div>
+ </el-card>
+ </el-collapse-item>
+ </el-collapse>
+ </el-form>
+
+
+ <div style="text-align:center;font-size:15px;font-weight:bold;color:#fc9393;margin: 20px 0;">
+ {{ currentFilterScheme }}
+ </div>
+ </el-card>
+
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-upload2"
+ size="mini"
+ @click="handleImport"
+ >瀵煎叆</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-download"
+ size="mini"
+ @click="handleExport"
+ >瀵煎嚭</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-document"
+ size="mini"
+ @click="handleNumAdd"
+ >娴佹按鍙锋柊澧�</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="mini"
+ @click="handleAdd"
+ >鏂板</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-document-copy"
+ size="mini"
+ :disabled="single"
+ @click="handleCopy"
+ >澶嶅埗</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-edit"
+ size="mini"
+ :disabled="single"
+ @click="handleEdit"
+ >缂栬緫</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="danger"
+ plain
+ icon="el-icon-delete"
+ size="mini"
+ :disabled="single"
+ @click="handleDelete"
+ >鍒犻櫎</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-check"
+ size="mini"
+ :disabled="single"
+ @click="handleAudit(0)"
+ >瀹℃牳</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-close"
+ size="mini"
+ :disabled="single"
+ @click="handleAudit(1)"
+ >鍙嶅鏍�</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-turn-off"
+ size="mini"
+ :disabled="single"
+ @click="handleStop(0)"
+ >绂佺敤</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-open"
+ size="mini"
+ :disabled="single"
+ @click="handleStop(1)"
+ >鍙嶇鐢�</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="info"
+ plain
+ icon="el-icon-setting"
+ size="mini"
+ @click="handleColumnSetting"
+ >鍒楄缃�</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="info"
+ plain
+ icon="el-icon-s-operation"
+ size="mini"
+ @click="handleButtonSetting"
+ >鎸夐挳璁剧疆</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-folder-checked"
+ size="mini"
+ @click="handleSaveScheme"
+ >淇濆瓨鏂规</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-folder-opened"
+ size="mini"
+ @click="handleReadScheme"
+ >璇诲彇鏂规</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="info"
+ plain
+ icon="el-icon-refresh"
+ size="mini"
+ @click="handleRefresh"
+ >鍒锋柊</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="info"
+ plain
+ icon="el-icon-close"
+ size="mini"
+ @click="handleExit"
+ >閫�鍑�</el-button
+ >
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="10" style="margin-top: 10px">
+ <el-col :span="4">
+ <el-card style="height: 600px; overflow: auto">
+ <div slot="header">
+ <span>瀹㈡埛鍒嗙被</span>
+ </div>
+ <el-tree
+ :data="treeData"
+ :props="treeProps"
+ node-key="id"
+ default-expand-all
+ :expand-on-click-node="false"
+ @node-click="handleTreeNodeClick"
+ :highlight-current="true"
+ >
+ <span class="custom-tree-node" slot-scope="{ node, data }">
+ <span>{{ node.label }}</span>
+ </span>
+ </el-tree>
+ </el-card>
+ </el-col>
+
+
+ <el-col :span="20">
+ <div class="tableBox" v-loading="loading">
+ <el-table
+ :data="tableData"
+ ref="tableData"
+ height="600"
+ @selection-change="handleSelectionChange"
+ border
+ @row-click="handleRowClick"
+ :row-style="rowStyle"
+ @cell-dblclick="handleDblclick"
+ v-if="tableShow"
+ >
+ <el-table-column type="selection" width="55" align="center" fixed="left" />
+ <el-table-column prop="hmainid" label="鍗曟嵁ID" v-if="false" />
+ <el-table-column
+ v-for="(item, index) in btList"
+ :key="index"
+ :align="item.align"
+ :prop="item.field"
+ :label="item.title"
+ :width="item.width"
+ v-if="!item.hide"
+ :sortable="item.sort"
+ show-overflow-tooltip
+ :fixed="item.fixed"
+ >
+ <template slot-scope="{ row, column }">
+ <div :style="item.style">
+ <el-button
+ type="text"
+ @click="handleCustomerCodeClick(row)"
+ v-if="column.property === '瀹㈡埛浠g爜'"
+ >{{ row[column.property] }}</el-button
+ >
+ <span v-else-if="(column.property || '').includes('鏃堕棿') || (column.property || '').includes('鏃ユ湡')">
+ {{ formatDate(row[column.property]) }}
+ </span>
+ <span v-else>{{ row[column.property] }}</span>
+ </div>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="page"
+ :limit.sync="pageSize"
+ :pageSizes="pageSizes"
+ @pagination="getList"
+ />
+ </div>
+ </el-col>
+ </el-row>
+
+
+ <el-card v-if="selectedRow" style="margin-top: 20px">
+ <div slot="header">
+ <span>鍏宠仈鐢ㄦ埛</span>
+ </div>
+ <el-table
+ :data="relationUserData"
+ height="300"
+ border
+ v-loading="relationLoading"
+ >
+ <el-table-column
+ v-for="(item, index) in relationUserColumns"
+ :key="index"
+ :prop="item.field"
+ :label="item.title"
+ :width="item.width"
+ :align="item.align"
+ >
+ <template slot-scope="{ row, column }">
+ <span v-if="column.property.includes('鏃堕棿') || column.property.includes('鏃ユ湡')">
+ {{ formatDate(row[column.property]) }}
+ </span>
+ <span v-else>{{ row[column.property] }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-card>
+
+ <el-dialog
+ title="闅愯棌鍒楄缃�"
+ :visible.sync="openColumnSetting"
+ width="816px"
+ append-to-body
+ >
+ <RowSettings
+ :colName="btResList"
+ :HModName="HModName"
+ @rowEditClose="columnSettingClose"
+ v-if="columnSettingShow"
+ />
+ </el-dialog>
+
+ <el-dialog
+ title="缂栬緫瀹㈡埛"
+ :visible.sync="openEdit"
+ width="1480px"
+ append-to-body
+ class="customerBox"
+ :before-close="closeEdit"
+ >
+ <CustomerEdit
+ :OperationType="OperationType"
+ :linterid="selectedRow ? selectedRow.HItemID : ''"
+ :HSouceBillType="''"
+ :HCusTypeID="currentCusTypeID"
+ :HCusClsName="currentCusClsName"
+ @editClose="editClose"
+ v-if="editShow"
+ />
+ </el-dialog>
+
+ <el-dialog
+ :title="upload.title"
+ :visible.sync="upload.open"
+ width="1500px"
+ append-to-body
+ >
+ <div style="margin-top: -20px">
+ <el-button type="primary" @click="handleImportSubmit">瀵煎叆鏁版嵁</el-button>
+ <el-button type="primary" @click="upload.open = false">閫� 鍑�</el-button>
+ <el-upload
+ ref="upload"
+ :limit="1"
+ accept=".xlsx, .xls"
+ style="display: inline-block; margin-left: 10px"
+ :action="upload.url + '?updateSupport=' + upload.updateSupport"
+ :disabled="upload.isUploading"
+ :on-progress="handleFileUploadProgress"
+ :on-success="handleFileSuccess"
+ >
+ <el-button type="primary">鏂囦欢涓婁紶</el-button>
+ </el-upload>
+ </div>
+ <el-table
+ :data="uploadData"
+ v-loading="uploadTableLoading"
+ border
+ height="550"
+ >
+ <el-table-column type="index" label="搴忓彿" width="55" align="center" />
+ <el-table-column label="瀹㈡埛浠g爜" prop="瀹㈡埛浠g爜" align="center" width="120" />
+ <el-table-column label="瀹㈡埛鍚嶇О" prop="瀹㈡埛鍚嶇О" align="center" width="120" />
+ <el-table-column label="瀹㈡埛鍒嗙被" prop="瀹㈡埛鍒嗙被" align="center" width="120" />
+ <el-table-column label="鎿嶄綔" align="center">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-delete"
+ @click="uploadDataDelete(scope.$index)"
+ >鍒犻櫎</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import axios from "axios";
+import RowSettings from "@/views/component/rowSettings";
+import CustomerEdit from "@/views/GyCustomer/CustomerEdit";
+
+export default {
+ name: "GyCustomer",
+ components: { RowSettings ,CustomerEdit},
+ props: {
+ openPage: { type: String },
+ },
+ data() {
+ return {
+
+ activeCollapse: [],
+
+ HModName: "Gy_Customer",
+ HModuleName: "瀹㈡埛鍒楄〃缁存姢",
+ HClassTag: "ForFilteringSchemes",
+
+
+
+ treeData: [],
+ treeProps: {
+ children: 'children',
+ label: 'title'
+ },
+ currentCusTypeID: 0,
+ currentCusClsName: '',
+
+
+ editShow: false,
+ openEdit: false,
+ OperationType: null,
+
+ columnSettingShow: false,
+ openColumnSetting: false,
+
+ tableShow: true,
+ loading: true,
+
+ queryParams: {
+ HNumber: null,
+ HName: null,
+ HNumber2: null,
+ ColName: "0",
+ ColName1: "0",
+ ColName2: "0",
+ Comparator: "0",
+ Comparator1: "0",
+ Comparator2: "0",
+ ColContent: "",
+ ColContent1: "",
+ ColContent2: "",
+ },
+
+ currentFilterScheme: "",
+ HInterID_Choose: 0,
+
+ comparatorList: [
+ { label: "=", value: "=" },
+ { label: ">=", value: ">=" },
+ { label: ">", value: ">" },
+ { label: "<=", value: "<=" },
+ { label: "<", value: "<" },
+ { label: "<>", value: "<>" },
+ { label: "鍖呭惈", value: "7" },
+ { label: "宸﹀寘鍚�", value: "8" },
+ { label: "鍙冲寘鍚�", value: "9" },
+ { label: "涓嶅寘鍚�", value: "10" },
+ ],
+
+ sWhere: "",
+ selectedRow: null,
+ ids: [],
+ single: true,
+ multiple: true,
+ tyResList: [],
+ btList: [],
+ btResList: [],
+ tableData: [],
+ pageSizes: [50, 100, 500, 5000, 50000],
+ page: 1,
+ pageSize: 50,
+ total: 0,
+
+ relationUserData: [],
+ relationUserColumns: [],
+ relationLoading: false,
+
+ upload: {
+ open: false,
+ title: "瀵煎叆",
+ isUploading: false,
+ updateSupport: 0,
+ url: "http://47.96.97.237/API/Gy_Customer/Gy_Customer_Excel",
+ },
+ uploadData: [],
+ uploadTableLoading: false,
+
+ baseURL: process.env.VUE_APP_BASE_URL || "http://47.96.97.237/API/",
+ user: "admin",
+ };
+ },
+ computed: {
+ visibleColumns() {
+ return this.btList.filter(item => !item.hide && item.field);
+ }
+ },
+ created() {
+ this.fetchData();
+ },
+ methods: {
+ fetchData() {
+ axios
+ .get(
+ "http://47.96.97.237/API/Web/GetUser?UserName=001&PassWord=123456&HOrgName=100038"
+ )
+ .then((response) => {
+ let data = response.data.data[0];
+ this.user = data.Czymc;
+ this.getTreeData();
+ this.getList();
+ this.getDefaultFilterScheme();
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ getTreeData() {
+ axios
+ .get(this.baseURL + "/Gy_BadReason/Gy_CusTypeTreeListByLevel")
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.treeData = JSON.parse(response.data.data);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ getList() {
+ this.tableShow = false;
+ this.loading = true;
+ console.log(this.sWhere);
+ console.log(this.user);
+ console.log(this.page);
+ console.log(this.pageSize);
+ axios
+ .get(this.baseURL + "/Gy_Customer/page", {
+ params: {
+ sWhere: this.sWhere,
+ user: this.user,
+ page: 1,
+ size: this.pageSize,
+ Organization: ''
+ },
+ })
+ .then((response) => {
+ let data1 = response.data;
+ console.log(response);
+ console.log(response.count);
+ if (data1.code == 1) {
+ this.tyResList = data1.data;
+ console.log(this.tyResList);
+ this.btResList = data1.data;
+ console.log(this.btResList);
+ this.total = data1.count;
+ this.setDefaultColumns();
+ this.tableData = data1.data;
+ this.tableShow = true;
+ this.loading = false;
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ this.loading = false;
+ });
+ },
+
+ setDefaultColumns() {
+ this.btList = [
+ { type: 'checkbox', fixed: 'left' },
+ { field: 'hmainid', title: '鍗曟嵁ID', hide: true },
+ { field: '瀹㈡埛浠g爜', title: '瀹㈡埛浠g爜', align: 'center', width: 120 },
+ { field: '瀹㈡埛鍚嶇О', title: '瀹㈡埛鍚嶇О', align: 'center', width: 120 },
+ { field: '鏉$爜缂栧彿', title: '鏉$爜缂栧彿', align: 'center', width: 120 },
+ { field: '缁勭粐鍚嶇О', title: '缁勭粐鍚嶇О', align: 'center', width: 120 },
+ { field: '鏄庣粏鏍囪', title: '鏄庣粏鏍囪', align: 'center', width: 100 },
+ { field: '绂佺敤鏍囪', title: '绂佺敤鏍囪', align: 'center', width: 100 },
+ { field: '瀹℃牳浜�', title: '瀹℃牳浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓浜�', title: '鍒涘缓浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓鏃堕棿', title: '鍒涘缓鏃堕棿', align: 'center', width: 150 }
+ ];
+ },
+
+ handleTreeNodeClick(data) {
+ this.currentCusTypeID = data.id;
+ this.currentCusClsName = data.title;
+
+ if (data.id == "100") {
+ this.sWhere = " and HCusTypeID= "+"0";
+ } else if (data.id == "0") {
+ this.sWhere = "";
+ } else {
+ this.sWhere = " and HCusTypeID='" + data.id + "' ";
+ }
+ this.getList();
+ },
+
+
+ async handleQuery() {
+ this.sWhere = "";
+
+ this.processFilterConditions();
+
+
+ if (this.queryParams.HNumber) {
+ this.sWhere += " and 瀹㈡埛浠g爜 like '%" + this.queryParams.HNumber + "%'";
+ }
+ if (this.queryParams.HName) {
+ this.sWhere += " and 瀹㈡埛鍚嶇О like '%" + this.queryParams.HName + "%'";
+ }
+
+ this.getList();
+ },
+
+ processFilterConditions() {
+ const conditions = [
+ { colName: this.queryParams.ColName, comparator: this.queryParams.Comparator, content: this.queryParams.ColContent },
+ { colName: this.queryParams.ColName1, comparator: this.queryParams.Comparator1, content: this.queryParams.ColContent1 },
+ { colName: this.queryParams.ColName2, comparator: this.queryParams.Comparator2, content: this.queryParams.ColContent2 }
+ ];
+
+ conditions.forEach(condition => {
+ if (condition.colName && condition.colName !== "0" && condition.comparator && condition.comparator !== "0") {
+ let com = "";
+ switch (condition.comparator) {
+ case "7":
+ com = "like'%" + condition.content + "%'";
+ break;
+ case "8":
+ com = "like'%" + condition.content + "'";
+ break;
+ case "9":
+ com = "like'" + condition.content + "%'";
+ break;
+ case "10":
+ com = "not like'%" + condition.content + "%'";
+ break;
+ default:
+ com = "" + condition.comparator + "'" + condition.content + "'";
+ break;
+ }
+ this.sWhere += " and " + condition.colName + " " + com;
+ }
+ });
+ },
+
+
+ resetQuery() {
+ this.sWhere = "";
+ this.queryParams = {
+ HNumber: null,
+ HName: null,
+ HNumber2: null,
+ ColName: "0",
+ ColName1: "0",
+ ColName2: "0",
+ Comparator: "0",
+ Comparator1: "0",
+ Comparator2: "0",
+ ColContent: "",
+ ColContent1: "",
+ ColContent2: "",
+ };
+ this.getList();
+ },
+
+ handleResCnz() {
+ if (!this.queryParams.HNumber2) {
+ this.$modal.msgWarning("璇疯緭鍏ュ鎴蜂唬鐮�");
+ return;
+ }
+
+ axios
+ .get(this.baseURL + "/Gy_Customer/Gy_CustomerViewApi", {
+ params: {
+ Number: this.queryParams.HNumber2,
+ Type: 'KH'
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.$modal.msgSuccess(response.data.Message);
+ this.getList();
+ } else {
+ this.$modal.msgError(response.data.Message);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+
+
+ handleImport() {
+ this.uploadData = [];
+ this.upload.isUploading = false;
+ this.upload.title = "瀵煎叆";
+ this.upload.open = true;
+ },
+
+ handleExport() {
+ axios
+ .get(this.baseURL + "/LMES/getReportByModRightNameCheck", {
+ params: {
+ ModRightNameCheck: "Gy_Customer_ExportExcel",
+ user: this.user
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ const ws = this.$XLSX.utils.json_to_sheet(this.tyResList);
+ const wb = this.$XLSX.utils.book_new();
+ this.$XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
+ this.$XLSX.writeFile(wb, `Gy_Customer_${new Date().getTime()}.xlsx`);
+ } else {
+ this.$modal.msgError("褰撳墠妯″潡娌℃湁瀵煎嚭鏉冮檺!");
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ handleNumAdd() {
+ if ((this.currentCusTypeID == 0 || this.currentCusTypeID == null) && !this.judgeSkipTouchCusType()) {
+ this.$modal.msgWarning("璇烽�夋嫨鍏蜂綋瀹㈡埛鍒嗙被锛�");
+ return;
+ }
+ this.OperationType = 2;
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+ handleAdd() {
+ this.OperationType = 1;
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+ handleCopy() {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+ this.OperationType = 6;
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+ handleEdit() {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+ this.OperationType = 3;
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+ handleDelete() {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+
+ if (this.selectedRow.瀹℃牳浜� !== null && this.selectedRow.瀹℃牳浜� !== '') {
+ this.$modal.msgError("宸茶瀹℃牳鐨勭敤鎴蜂笉鑳借鍒犻櫎!");
+ return;
+ }
+
+ this.$modal
+ .confirm("纭瑕佸垹闄ゅ悧锛屽垹闄ゅ悗涓嶈兘鎭㈠")
+ .then(() => {
+ axios
+ .get(this.baseURL + "/Gy_Customer/Delete_Json", {
+ params: {
+ HItemID: this.selectedRow.HItemID,
+ User: this.user,
+ ModRightNameDelete: 'Crm_CustomerFile_Delete'
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.getList();
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ } else {
+ this.$modal.msgError("閿欒:" + response.data.code + response.data.Message);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ })
+ .catch(() => {});
+ },
+
+ handleAudit(isAudit) {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+
+ axios
+ .get(this.baseURL + "/Gy_Customer/AuditGy_Customer", {
+ params: {
+ HInterID: this.selectedRow.HItemID,
+ IsAudit: isAudit,
+ CurUserName: this.user
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.getList();
+ this.$modal.msgSuccess(response.data.Message);
+ } else {
+ this.$modal.msgError(response.data.Message);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ handleStop(isStop) {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+ axios
+ .get(this.baseURL + "/Gy_Customer/StopGy_Customer", {
+ params: {
+ HInterID: this.selectedRow.HItemID,
+ IsStop: isStop,
+ CurUserName: this.user
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.getList();
+ this.$modal.msgSuccess(response.data.Message);
+ } else {
+ this.$modal.msgError(response.data.Message);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ handleColumnSetting() {
+ this.columnSettingShow = true;
+ this.openColumnSetting = true;
+ },
+
+ handleButtonSetting() {
+ this.$modal.msgInfo("鎸夐挳璁剧疆鍔熻兘");
+ },
+
+ handleSaveScheme() {
+ this.$modal.msgInfo("淇濆瓨鏂规鍔熻兘");
+ },
+
+ handleReadScheme() {
+ this.$modal.msgInfo("璇诲彇鏂规鍔熻兘");
+ },
+
+ handleRefresh() {
+ this.getList();
+ },
+
+ handleExit() {
+ this.$router.go(-1);
+ },
+
+ handleCustomerCodeClick(row) {
+ this.selectedRow = row;
+ this.OperationType = 3;
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+ handleRowClick(row, column, event) {
+ this.$refs.tableData.toggleRowSelection(row);
+ this.selectedRow = row;
+ this.getRelationUserData(row.HItemID);
+ },
+
+ getRelationUserData(HCusID) {
+ this.relationLoading = true;
+ axios
+ .get(this.baseURL + "/Gy_Customer/RelationUserlist", {
+ params: { HCusID: HCusID }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.relationUserData = response.data.data;
+ this.setRelationUserColumns(response.data.list);
+ }
+ this.relationLoading = false;
+ })
+ .catch((error) => {
+ this.relationLoading = false;
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+
+ setRelationUserColumns(list) {
+ this.relationUserColumns = [];
+ for (let key in list) {
+ if (list[key].ColmCols !== 'HCusID') {
+ this.relationUserColumns.push({
+ field: list[key].ColmCols,
+ title: list[key].ColmCols,
+ align: 'center',
+ width: 120
+ });
+ }
+ }
+ },
+
+ rowStyle({ row, rowIndex }) {
+ if (this.ids.includes(row.hmainid)) {
+ return { background: "#ecf5ff" };
+ }
+ },
+
+ handleDblclick(row, column, cell, event) {
+ this.handleCustomerCodeClick(row);
+ },
+
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.hmainid);
+ this.single = selection.length != 1;
+ this.multiple = !selection.length;
+ if (!this.single) {
+ this.selectedRow = selection[0];
+ this.getRelationUserData(this.selectedRow.HItemID);
+ }
+ },
+
+ closeEdit() {
+ this.openEdit = false;
+ this.editShow = false;
+ },
+
+ editClose(val) {
+ this.openEdit = false;
+ this.editShow = false;
+ this.getList();
+ },
+
+ columnSettingClose(val) {
+ this.columnSettingShow = false;
+ this.openColumnSetting = val;
+ this.getList();
+ },
+
+ handleFileUploadProgress(event, file, fileList) {
+ this.upload.isUploading = true;
+ this.uploadTableLoading = true;
+ },
+
+ handleFileSuccess(response, file, fileList) {
+ this.upload.isUploading = true;
+ this.$refs.upload.clearFiles();
+ if (response.code == 1) {
+ this.uploadData = response.data;
+ this.uploadTableLoading = false;
+ } else {
+ this.$alert(
+ "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+ response.Message +
+ "</div>",
+ "瀵煎叆缁撴灉",
+ { dangerouslyUseHTMLString: true }
+ );
+ }
+ },
+
+ handleImportSubmit() {
+ if (this.uploadData.length === 0) {
+ this.$modal.msgWarning("璇峰厛涓婁紶鏂囦欢");
+ return;
+ }
+
+ var sMainSub = JSON.stringify(this.uploadData) + "&鍜�" + this.user;
+ axios({
+ method: "post",
+ url: this.baseURL + "/Gy_Customer/Gy_Customer_btnSave",
+ data: {
+ sMainSub: sMainSub,
+ },
+ })
+ .then((res) => {
+ this.$alert(
+ "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+ res.data.Message +
+ "</div>",
+ "瀵煎叆缁撴灉",
+ { dangerouslyUseHTMLString: true }
+ );
+ this.upload.open = false;
+ this.getList();
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ uploadDataDelete(index) {
+ this.uploadData.splice(index, 1);
+ },
+
+
+ formatDate(dateString) {
+ if (!dateString) return '';
+ const date = new Date(dateString);
+ return date.toLocaleString('zh-CN');
+ },
+
+ judgeSkipTouchCusType() {
+ if (this.treeData.length > 0 && this.treeData[0].children &&
+ this.treeData[0].children.length == 1 &&
+ this.treeData[0].children[0].children.length == 0) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ getDefaultFilterScheme() {
+ this.currentFilterScheme = "褰撳墠杩囨护鏂规锛氶粯璁ゆ柟妗�";
+ }
+ },
+};
+</script>
+
+<style>
+.customerBox .el-date-editor.el-input {
+ width: 100%;
+}
+
+.custom-tree-node {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 14px;
+ padding-right: 8px;
+}
+
+.filter-collapse {
+ margin-top: 10px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/component/AreaDialog/index.vue b/src/views/component/AreaDialog/index.vue
new file mode 100644
index 0000000..b1d526c
--- /dev/null
+++ b/src/views/component/AreaDialog/index.vue
@@ -0,0 +1,492 @@
+<template>
+ <el-dialog
+ title="閫夋嫨鍦板尯"
+ :visible.sync="dialogVisible"
+ width="80%"
+ :before-close="handleClose"
+ append-to-body
+ >
+ <div class="area-dialog">
+ <el-card class="search-card">
+ <div slot="header" class="clearfix">
+ <span>鏌ヨ鏉′欢</span>
+ <el-button
+ style="float: right; padding: 3px 0"
+ type="text"
+ @click="toggleCollapse"
+ >
+ {{ collapse ? '灞曞紑' : '鏀惰捣' }}
+ </el-button>
+ </div>
+
+ <el-form :model="queryParams" ref="queryForm" :inline="true">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍦板尯浠g爜">
+ <el-input
+ v-model="queryParams.HNumber"
+ placeholder="璇疯緭鍏ュ湴鍖轰唬鐮�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍦板尯鍚嶇О">
+ <el-input
+ v-model="queryParams.HName"
+ placeholder="璇疯緭鍏ュ湴鍖哄悕绉�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" @click="handleQuery">鏌ヨ</el-button>
+ <el-button icon="el-icon-refresh" @click="handleReset">閲嶇疆</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-collapse-transition>
+ <div v-show="!collapse">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="杩囨护瀛楁">
+ <el-select v-model="queryParams.ColName" placeholder="璇烽�夋嫨瀛楁" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="column in visibleColumns"
+ :key="column.field"
+ :label="column.label"
+ :value="column.field"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="姣旇緝绗�">
+ <el-select v-model="queryParams.Comparator" placeholder="璇烽�夋嫨姣旇緝绗�" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option label="=" value="=" />
+ <el-option label=">=" value=">=" />
+ <el-option label=">" value=">" />
+ <el-option label="<=" value="<=" />
+ <el-option label="<" value="<" />
+ <el-option label="<>" value="<>" />
+ <el-option label="鍖呭惈" value="7" />
+ <el-option label="宸﹀寘鍚�" value="8" />
+ <el-option label="鍙冲寘鍚�" value="9" />
+ <el-option label="涓嶅寘鍚�" value="10" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍐呭">
+ <el-input
+ v-model="queryParams.ColContent"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ </el-collapse-transition>
+ </el-form>
+ </el-card>
+
+
+ <el-card class="table-card">
+ <div slot="header" class="clearfix">
+ <span>鍦板尯鍒楄〃</span>
+ <el-button-group style="float: right">
+ <el-button type="primary" icon="el-icon-refresh" @click="handleRefresh">鍒锋柊</el-button>
+ <el-button type="primary" icon="el-icon-close" @click="handleExit">閫�鍑�</el-button>
+ </el-button-group>
+ </div>
+
+ <el-table
+ ref="table"
+ :data="tableData"
+ v-loading="loading"
+ height="400"
+ border
+ highlight-current-row
+ @row-dblclick="handleRowDblClick"
+ @row-click="handleRowClick"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55" align="center" />
+ <el-table-column
+ v-for="column in tableColumns"
+ :key="column.field"
+ :prop="column.field"
+ :label="column.label"
+ :width="column.width"
+ :align="column.align"
+ :sortable="column.sortable"
+ show-overflow-tooltip
+ >
+ <template slot-scope="{ row, column }">
+ <span v-if="column.property.includes('鏃堕棿') || column.property.includes('鏃ユ湡')">
+ {{ formatDate(row[column.property]) }}
+ </span>
+ <span v-else>{{ row[column.property] }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+
+
+ <el-pagination
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="pagination.page"
+ :page-sizes="[50, 100, 500, 5000]"
+ :page-size="pagination.size"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="pagination.total"
+ style="margin-top: 15px; text-align: right;"
+ />
+ </el-card>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import axios from 'axios'
+
+export default {
+ name: 'AreaDialog',
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ collapse: false,
+ loading: false,
+
+ // 鏌ヨ鍙傛暟
+ queryParams: {
+ HNumber: '',
+ HName: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: ''
+ },
+
+ // 琛ㄦ牸鏁版嵁
+ tableData: [],
+ tableColumns: [],
+ selectedRow: null,
+ multipleSelection: [],
+
+ // 鍒嗛〉
+ pagination: {
+ page: 1,
+ size: 50,
+ total: 0
+ },
+
+ // 闅愯棌瀛楁
+ hiddenFields: ["HItemID", "鐭唬鐮�", "鐖剁骇ID", "绛夌骇", "鏈骇鏍囧織", "鍔╄鐮�", "鍒涘缓缁勭粐", "鑻辨枃鍚嶇О"],
+
+ baseURL: process.env.VUE_APP_BASE_URL || 'http://47.96.97.237/API/',
+ user: 'admin',
+ HModName: 'Gy_AreaSet'
+ }
+ },
+ computed: {
+ visibleColumns() {
+ return this.tableColumns
+ .filter(col => !this.hiddenFields.includes(col.field))
+ .map(col => ({
+ field: col.field,
+ label: col.label
+ }))
+ }
+ },
+ watch: {
+ visible: {
+ immediate: true,
+ handler(val) {
+ this.dialogVisible = val
+ if (val) {
+ this.initData()
+ }
+ }
+ },
+ dialogVisible(val) {
+ this.$emit('update:visible', val)
+ }
+ },
+ methods: {
+ initData() {
+ this.loadTableData()
+ },
+
+ async loadTableData() {
+ this.loading = true
+ try {
+ const sWhere = this.buildQueryCondition()
+
+ const response = await axios.get(`${this.baseURL}/Gy_BadReason/Gy_AreaSetList`, {
+ params: {
+ sWhere: sWhere,
+ user: this.user,
+ page: this.pagination.page,
+ size: this.pagination.size
+ }
+ })
+
+ if (response.data.count === 1) {
+ this.tableData = response.data.data
+ this.pagination.total = response.data.total || response.data.data.length
+ this.generateTableColumns(response.data.list)
+ } else {
+ this.$message.error(response.data.Message || '鍔犺浇鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鍔犺浇鍦板尯鏁版嵁澶辫触:', error)
+ this.$message.error('鍔犺浇鍦板尯鏁版嵁澶辫触')
+ } finally {
+ this.loading = false
+ }
+ },
+
+
+ buildQueryCondition() {
+ let sWhere = ""
+
+
+ if (this.queryParams.HNumber) {
+ sWhere += ` and 鍦板尯浠g爜 like '%${this.queryParams.HNumber}%'`
+ }
+ if (this.queryParams.HName) {
+ sWhere += ` and 鍦板尯鍚嶇О like '%${this.queryParams.HName}%'`
+ }
+
+ if (this.queryParams.ColName && this.queryParams.ColName !== "0" &&
+ this.queryParams.Comparator && this.queryParams.Comparator !== "0") {
+ let com = ""
+ switch (this.queryParams.Comparator) {
+ case "7":
+ com = `like '%${this.queryParams.ColContent}%'`
+ break
+ case "8":
+ com = `like '%${this.queryParams.ColContent}'`
+ break
+ case "9":
+ com = `like '${this.queryParams.ColContent}%'`
+ break
+ case "10":
+ com = `not like '%${this.queryParams.ColContent}%'`
+ break
+ default:
+ com = `${this.queryParams.Comparator} '${this.queryParams.ColContent}'`
+ break
+ }
+ sWhere += ` and ${this.queryParams.ColName} ${com}`
+ }
+
+
+ sWhere += this.addSWhereByOpenType()
+
+ return sWhere
+ },
+
+
+ addSWhereByOpenType() {
+
+ return " and 绂佺敤鏍囧織 = '鍚�' and 瀹℃牳浜� != ''"
+ },
+
+
+ generateTableColumns(columnList) {
+ this.tableColumns = []
+
+
+ this.tableColumns.push({ type: 'selection', fixed: 'left' })
+
+
+ if (columnList && columnList.length > 0) {
+ columnList.forEach(item => {
+ if (!this.hiddenFields.includes(item.ColmCols)) {
+ const column = {
+ field: item.ColmCols,
+ label: item.ColmCols,
+ align: 'center',
+ sortable: true,
+ width: 200
+ }
+
+
+ if (item.ColmType === 'DateTime') {
+ column.formatter = this.formatDate
+ }
+
+ this.tableColumns.push(column)
+ }
+ })
+ } else {
+
+ const defaultColumns = [
+ { field: '鍦板尯浠g爜', label: '鍦板尯浠g爜', align: 'center', width: 120 },
+ { field: '鍦板尯鍚嶇О', label: '鍦板尯鍚嶇О', align: 'center', width: 120 },
+ { field: '鏉$爜缂栧彿', label: '鏉$爜缂栧彿', align: 'center', width: 120 },
+ { field: '绂佺敤鏍囪', label: '绂佺敤鏍囪', align: 'center', width: 100 },
+ { field: '澶囨敞', label: '澶囨敞', align: 'center', width: 150 },
+ { field: '瀹℃牳浜�', label: '瀹℃牳浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓浜�', label: '鍒涘缓浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓鏃堕棿', label: '鍒涘缓鏃堕棿', align: 'center', width: 150 }
+ ]
+ this.tableColumns = [...this.tableColumns, ...defaultColumns]
+ }
+ },
+
+ // 鏌ヨ
+ handleQuery() {
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 閲嶇疆鏌ヨ
+ handleReset() {
+ this.queryParams = {
+ HNumber: '',
+ HName: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: ''
+ }
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 鍒锋柊
+ handleRefresh() {
+ this.loadTableData()
+ },
+
+ // 鍒囨崲鎶樺彔鐘舵��
+ toggleCollapse() {
+ this.collapse = !this.collapse
+ },
+
+ // 琛屽弻鍑讳簨浠�
+ handleRowDblClick(row) {
+ this.selectedRow = row
+ this.confirmSelection()
+ },
+
+ // 琛岀偣鍑讳簨浠�
+ handleRowClick(row) {
+ this.$refs.table.toggleRowSelection(row)
+ this.selectedRow = row
+ },
+
+ // 閫夋嫨鍙樺寲
+ handleSelectionChange(selection) {
+ this.multipleSelection = selection
+ if (selection.length === 1) {
+ this.selectedRow = selection[0]
+ }
+ },
+
+ // 纭閫夋嫨
+ confirmSelection() {
+ if (this.selectedRow) {
+ this.$emit('selected', {
+ HItemID: this.selectedRow.HItemID,
+ 鍦板尯鍚嶇О: this.selectedRow.鍦板尯鍚嶇О
+ })
+ this.dialogVisible = false
+ } else {
+ this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹�')
+ }
+ },
+
+ // 閫�鍑�
+ handleExit() {
+ this.dialogVisible = false
+ },
+
+ // 鍏抽棴瀵硅瘽妗�
+ handleClose(done) {
+ this.$confirm('纭鍏抽棴锛�')
+ .then(_ => {
+ done()
+ })
+ .catch(_ => {})
+ },
+
+ // 鍒嗛〉澶у皬鏀瑰彉
+ handleSizeChange(size) {
+ this.pagination.size = size
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 褰撳墠椤垫敼鍙�
+ handleCurrentChange(page) {
+ this.pagination.page = page
+ this.loadTableData()
+ },
+
+ // 鏍煎紡鍖栨棩鏈�
+ formatDate(dateString) {
+ if (!dateString) return ''
+ try {
+ const date = new Date(dateString)
+ return date.toLocaleDateString('zh-CN')
+ } catch (error) {
+ return dateString
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+.area-dialog {
+ height: 70vh;
+ display: flex;
+ flex-direction: column;
+}
+
+.search-card {
+ margin-bottom: 15px;
+}
+
+.table-card {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.table-card >>> .el-card__body {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ content: "";
+}
+.clearfix:after {
+ clear: both;
+}
+
+.el-form-item {
+ margin-bottom: 15px;
+}
+
+.el-table {
+ flex: 1;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/component/BarCodeDetail/index.vue b/src/views/component/BarCodeDetail/index.vue
new file mode 100644
index 0000000..bb5dafc
--- /dev/null
+++ b/src/views/component/BarCodeDetail/index.vue
@@ -0,0 +1,455 @@
+<template>
+ <div class="barcode-detail">
+ <el-dialog
+ :visible.sync="dialogVisible"
+ title="鏉$爜鍑哄叆搴撹褰曡〃"
+ width="90%"
+ top="5vh"
+ :close-on-click-modal="false"
+ @closed="handleClosed"
+ >
+ <el-card>
+ <div class="dialog-content">
+ <el-form :model="formData" label-width="100px" class="form-container">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍗曟嵁鍐呯爜">
+ <el-input v-model="formData.HInterID" disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍗曟嵁鍙�">
+ <el-input v-model="formData.HBillNo" disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍗曟嵁绫诲瀷">
+ <el-input v-model="formData.HBillType" disabled />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+
+ <div class="table-toolbar">
+ <el-button size="mini" @click="handlePreview">
+ <i class="el-icon-view"></i> 棰勮
+ </el-button>
+ <el-button size="mini" @click="handlePrint">
+ <i class="el-icon-printer"></i> 鎵撳嵃
+ </el-button>
+ <el-button size="mini" @click="handleSave">
+ <i class="el-icon-document"></i> 淇濆瓨
+ </el-button>
+ <el-button size="mini" @click="handleColumnSetting">
+ <i class="el-icon-setting"></i> 鍒楄缃�
+ </el-button>
+ </div>
+
+ <el-table
+ ref="mainTable"
+ :data="tableData"
+ border
+ stripe
+ style="width: 100%"
+ :loading="loading"
+ @selection-change="handleSelectionChange"
+ show-summary
+ :summary-method="getSummaries"
+ >
+ <el-table-column type="selection" width="55" fixed="left" />
+ <el-table-column
+ v-for="column in tableColumns"
+ :key="column.field"
+ :prop="column.field"
+ :label="column.title"
+ :width="column.width"
+ :align="column.align"
+ :fixed="column.fixed"
+ :sortable="column.sortable"
+ :show-overflow-tooltip="true"
+ >
+ <template v-if="column.editable" #default="scope">
+ <el-input
+ v-model="scope.row[column.field]"
+ size="mini"
+ @blur="handleCellEdit(scope.row, column.field, scope.row[column.field])"
+ />
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </el-card>
+ </el-dialog>
+
+ <el-dialog
+ :visible.sync="columnDialogVisible"
+ title="闅愯棌鍒楄缃�"
+ width="50%"
+ >
+ <div class="column-setting">
+ <el-checkbox-group v-model="selectedColumns">
+ <el-checkbox
+ v-for="column in allColumns"
+ :key="column.field"
+ :label="column.field"
+ >
+ {{ column.title }}
+ </el-checkbox>
+ </el-checkbox-group>
+ </div>
+ <div slot="footer">
+ <el-button @click="columnDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="applyColumnSettings">纭畾</el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import axios from 'axios'
+
+export default {
+ name: 'BarCodeDetail',
+ data() {
+ return {
+ dialogVisible: false,
+ columnDialogVisible: false,
+ loading: false,
+ formData: {
+ HInterID: '',
+ HBillNo: '',
+ HBillType: ''
+ },
+ tableData: [],
+ tableColumns: [],
+ allColumns: [],
+ selectedColumns: [],
+ selectedRows: [],
+ baseURL: process.env.VUE_APP_BASE_URL || "http://47.96.97.237/API/"
+ }
+ },
+ methods: {
+
+ open(record) {
+ if (!record) {
+ this.$message.warning('璇烽�夋嫨瑕佹煡鐪嬫潯鐮佹槑缁嗙殑鍗曟嵁')
+ return
+ }
+
+ const hmainid = record.hmainid || record.HInterID
+ const billNo = record.鍗曟嵁鍙� || record.HBillNo
+
+
+ let billTypeDesc = ''
+ switch (record.鍗曟嵁绫诲瀷 || '') {
+ case '1201': billTypeDesc = '澶栬喘鍏ュ簱鍗�'; break
+ case '1202': billTypeDesc = '浜у搧鍏ュ簱鍗�'; break
+ case '1203': billTypeDesc = '鍏跺畠鍏ュ簱鍗�'; break
+ case '1204': billTypeDesc = '鐢熶骇棰嗘枡'; break
+ case '1205': billTypeDesc = '閿�鍞嚭搴�'; break
+ case '1206': billTypeDesc = '鍏跺畠鍑哄簱鍗�'; break
+ case '1207': billTypeDesc = '鐩存帴璋冩嫧鍗�'; break
+ case '1210': billTypeDesc = '濮斿鍔犲伐鍏ュ簱鍗�'; break
+ case '1211': billTypeDesc = '濮斿鍔犲伐鍑哄簱鍗�'; break
+ default: billTypeDesc = record.鍗曟嵁绫诲瀷 || ''
+ }
+
+ this.formData = {
+ HInterID: hmainid,
+ HBillNo: billNo,
+ HBillType: billTypeDesc
+ }
+
+ this.dialogVisible = true
+ this.$nextTick(() => {
+ this.loadData(hmainid, record.鍗曟嵁绫诲瀷 || '', billNo)
+ })
+ },
+
+ async loadData(HInterID, HBillType, HBillNo) {
+ this.loading = true
+ try {
+ const sWhere = `${HInterID},'${HBillType}','${HBillNo}'`
+
+ const url = `${this.baseURL}/Kf_ICStockInOutBill/Kf_BarCodeDetailQuery`
+ const params = { sWhere }
+
+ const response = await axios.get(url, { params })
+ const data = response.data
+
+ if (data && data.list) {
+ this.generateTableColumns(data.list)
+ this.tableData = data.data || []
+ this.applyColumnSettingsFromStorage()
+ } else {
+ this.$message.error('鑾峰彇鏉$爜鏄庣粏鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鍔犺浇鏉$爜鏄庣粏澶辫触:', error)
+ this.$message.error('鍔犺浇鏉$爜鏄庣粏澶辫触')
+ } finally {
+ this.loading = false
+ }
+ },
+
+ generateTableColumns(columnList) {
+ const columns = []
+ const allColumns = []
+
+
+ columns.push({
+ type: 'selection',
+ width: 55,
+ fixed: 'left'
+ })
+
+ columnList.forEach((item, index) => {
+ const colName = item.ColmCols
+ let columnConfig = {
+ field: colName,
+ title: colName,
+ width: 200,
+ align: 'center',
+ sortable: true
+ }
+
+
+ switch (colName) {
+ case 'HItemID':
+ columnConfig.hide = true
+ break
+ case 'HMaterialJQty':
+ columnConfig.title = '閲嶉噺缁存姢'
+ columnConfig.editable = true
+ break
+ case 'HWeight_TL':
+ columnConfig.title = '鎶曟枡鍏嬮噸缁存姢'
+ columnConfig.editable = true
+ break
+ case 'HWeight_CP':
+ columnConfig.title = '瀹為檯鍏嬮噸缁存姢'
+ columnConfig.editable = true
+ break
+ case '鏁伴噺':
+ columnConfig.total = true
+ break
+ }
+
+ columns.push(columnConfig)
+ allColumns.push({ ...columnConfig })
+ })
+
+ this.tableColumns = columns
+ this.allColumns = allColumns
+ this.selectedColumns = allColumns.map(col => col.field)
+ },
+
+
+ handleCellEdit(row, field, value) {
+ const ref = /^\d+(\.\d+)?$/
+
+ switch (field) {
+ case 'HMaterialJQty':
+ if (!ref.test(value)) {
+ this.$message.warning('閲嶉噺缁存姢璇疯緭鍏ヤ笉灏忎簬0鐨勬暟瀛�!')
+ this.$set(row, field, '')
+ }
+ break
+ case 'HWeight_TL':
+ if (!ref.test(value) || value == 0) {
+ this.$message.warning('鎶曟枡鍏嬮噸缁存姢璇疯緭鍏ュぇ浜�0鐨勬暟瀛�!')
+ this.$set(row, field, '')
+ }
+ break
+ case 'HWeight_CP':
+ if (!ref.test(value)) {
+ this.$message.warning('瀹為檯鍏嬮噸缁存姢璇疯緭鍏ヤ笉灏忎簬0鐨勬暟瀛�!')
+ this.$set(row, field, '')
+ }
+ break
+ }
+ },
+
+
+ handleSelectionChange(selection) {
+ this.selectedRows = selection
+ },
+
+ // 棰勮 todo
+ handlePreview() {
+ this.$message.info('棰勮鍔熻兘寰呭疄鐜�')
+ },
+
+ // 鎵撳嵃
+ async handlePrint() {
+ if (this.selectedRows.length === 0) {
+ this.$message.warning('璇烽�夋嫨瑕佹墦鍗扮殑鏁版嵁!')
+ return
+ }
+
+ const HBarCodeStrList = this.selectedRows.map(row => `''${row.鏉$爜}''`).join(',')
+ const sWhere_Temp = `${this.formData.HInterID},'${this.formData.HBillType}','${this.formData.HBillNo}',' and 鏉$爜 in (${HBarCodeStrList})'`
+
+ window.open(`../../BaseSet/SRM_OpenTmpList.html?sWhere=${sWhere_Temp}&MyMsg=${sWhere_Temp}&Type=Kf_BarCodeDetailQuery`, '_blank')
+ },
+
+ // 淇濆瓨
+ async handleSave() {
+ if (!this.validateData()) {
+ return
+ }
+
+ const saveData = this.tableData.map(item => ({
+ ...item,
+ HInterID: this.formData.HInterID,
+ HBillNo: this.formData.HBillNo,
+ HBillType: this.formData.HBillType,
+ HBarCode: item.鏉$爜
+ }))
+
+ try {
+ const sSubStr = JSON.stringify(saveData)
+ const sMainSub = `${sSubStr};${sessionStorage['HUserName'] || 'admin'}`
+
+ const url = `${this.baseURL}/Kf_ICStockInOutBill/Kf_BarCodeDetailQuery_saveData`
+ const response = await axios.post(url, { msg: sMainSub })
+
+ if (response.data.count === 1) {
+ this.$message.success(response.data.Message || '淇濆瓨鎴愬姛')
+ } else {
+ this.$message.error(response.data.Message || '淇濆瓨澶辫触')
+ }
+ } catch (error) {
+ console.error('淇濆瓨澶辫触:', error)
+ this.$message.error('淇濆瓨澶辫触')
+ }
+ },
+
+
+ validateData() {
+ const ref = /^\d+(\.\d+)?$/
+
+ for (let i = 0; i < this.tableData.length; i++) {
+ const row = this.tableData[i]
+
+
+ const weight = row.HMaterialJQty + ''
+ if (!ref.test(weight)) {
+ this.$message.warning(`绗�${i + 1}琛岋細閲嶉噺缁存姢璇疯緭鍏ヤ笉灏忎簬0鐨勬暟瀛楋紒`)
+ return false
+ }
+
+
+ const actualWeight = row.HWeight_CP + ''
+ if (!ref.test(actualWeight)) {
+ this.$message.warning(`绗�${i + 1}琛岋細瀹為檯鍏嬮噸缁存姢璇疯緭鍏ヤ笉灏忎簬0鐨勬暟瀛楋紒`)
+ return false
+ }
+
+
+ const feedWeight = row.HWeight_TL + ''
+ if (!ref.test(feedWeight)) {
+ this.$message.warning(`绗�${i + 1}琛岋細鎶曟枡鍏嬮噸缁存姢璇疯緭鍏ュぇ浜�0鐨勬暟瀛楋紒`)
+ return false
+ }
+ }
+
+ return true
+ },
+
+
+ handleColumnSetting() {
+ this.columnDialogVisible = true
+ },
+
+
+ applyColumnSettings() {
+ this.tableColumns = [
+ this.tableColumns[0],
+ ...this.allColumns.filter(col => this.selectedColumns.includes(col.field))
+ ]
+ this.columnDialogVisible = false
+
+
+ this.saveColumnSettings()
+ },
+
+ applyColumnSettingsFromStorage() {
+
+ },
+
+
+ saveColumnSettings() {
+
+ },
+
+ // 鍚堣琛岃绠�
+ getSummaries(param) {
+ const { columns, data } = param
+ const sums = []
+
+ columns.forEach((column, index) => {
+ if (index === 0) {
+ sums[index] = '鍚堣'
+ return
+ }
+
+ const values = data.map(item => Number(item[column.property]))
+ if (!values.every(value => isNaN(value))) {
+ sums[index] = values.reduce((prev, curr) => {
+ const value = Number(curr)
+ if (!isNaN(value)) {
+ return prev + curr
+ } else {
+ return prev
+ }
+ }, 0)
+ } else {
+ sums[index] = ''
+ }
+ })
+
+ return sums
+ },
+
+
+ handleClosed() {
+ this.tableData = []
+ this.tableColumns = []
+ this.selectedRows = []
+ }
+ }
+}
+</script>
+
+<style scoped>
+.barcode-detail {
+ font-family: "Microsoft YaHei", sans-serif;
+}
+
+.form-container {
+ margin-bottom: 16px;
+}
+
+.table-toolbar {
+ margin-bottom: 12px;
+}
+
+.column-setting {
+ max-height: 400px;
+ overflow-y: auto;
+}
+
+.column-setting .el-checkbox {
+ display: block;
+ margin-bottom: 8px;
+}
+
+:deep(.el-dialog__body) {
+ padding: 10px 20px;
+}
+
+:deep(.el-card__body) {
+ padding: 12px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/component/CurrencyDialog/index.vue b/src/views/component/CurrencyDialog/index.vue
new file mode 100644
index 0000000..943ce98
--- /dev/null
+++ b/src/views/component/CurrencyDialog/index.vue
@@ -0,0 +1,568 @@
+<template>
+ <el-dialog
+ title="閫夋嫨璐у竵"
+ :visible.sync="dialogVisible"
+ width="80%"
+ :before-close="handleClose"
+ append-to-body
+ >
+ <div class="currency-dialog">
+ <el-card class="search-card">
+ <div slot="header" class="clearfix">
+ <span>鏌ヨ鏉′欢</span>
+ <el-button
+ style="float: right; padding: 3px 0"
+ type="text"
+ @click="toggleCollapse"
+ >
+ {{ collapse ? '灞曞紑' : '鏀惰捣' }}
+ </el-button>
+ </div>
+
+ <el-form :model="queryParams" ref="queryForm" :inline="true">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="璐у竵浠g爜">
+ <el-input
+ v-model="queryParams.HNumber"
+ placeholder="璇疯緭鍏ヨ揣甯佷唬鐮�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璐у竵鍚嶇О">
+ <el-input
+ v-model="queryParams.HName"
+ placeholder="璇疯緭鍏ヨ揣甯佸悕绉�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" @click="handleQuery">鏌ヨ</el-button>
+ <el-button icon="el-icon-refresh" @click="handleReset">閲嶇疆</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-collapse-transition>
+ <div v-show="!collapse">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="杩囨护瀛楁">
+ <el-select v-model="queryParams.ColName" placeholder="璇烽�夋嫨瀛楁" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="column in visibleColumns"
+ :key="column.field"
+ :label="column.label"
+ :value="column.field"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="姣旇緝绗�">
+ <el-select v-model="queryParams.Comparator" placeholder="璇烽�夋嫨姣旇緝绗�" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option label="=" value="=" />
+ <el-option label=">=" value=">=" />
+ <el-option label=">" value=">" />
+ <el-option label="<=" value="<=" />
+ <el-option label="<" value="<" />
+ <el-option label="<>" value="<>" />
+ <el-option label="鍖呭惈" value="7" />
+ <el-option label="宸﹀寘鍚�" value="8" />
+ <el-option label="鍙冲寘鍚�" value="9" />
+ <el-option label="涓嶅寘鍚�" value="10" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍐呭">
+ <el-input
+ v-model="queryParams.ColContent"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ </el-collapse-transition>
+
+ <!-- 褰撳墠杩囨护鏂规鏄剧ず -->
+ <div v-if="currentFilterScheme" class="filter-scheme">
+ {{ currentFilterScheme }}
+ </div>
+ </el-form>
+ </el-card>
+
+ <el-card class="table-card">
+ <div slot="header" class="clearfix">
+ <span>璐у竵鍒楄〃</span>
+ <el-button-group style="float: right">
+ <el-button type="primary" icon="el-icon-refresh" @click="handleRefresh">鍒锋柊</el-button>
+ <el-button type="primary" icon="el-icon-close" @click="handleExit">閫�鍑�</el-button>
+ </el-button-group>
+ </div>
+
+ <el-table
+ ref="table"
+ :data="tableData"
+ v-loading="loading"
+ height="400"
+ border
+ highlight-current-row
+ @row-dblclick="handleRowDblClick"
+ @row-click="handleRowClick"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55" align="center" />
+ <el-table-column
+ v-for="column in tableColumns"
+ :key="column.field"
+ :prop="column.field"
+ :label="column.label"
+ :width="column.width"
+ :align="column.align"
+ :sortable="column.sortable"
+ show-overflow-tooltip
+ >
+ <template slot-scope="{ row, column }">
+
+ <el-button
+ v-if="column.property === '璐у竵浠g爜'"
+ type="text"
+ @click="handleCurrencyCodeClick(row)"
+ style="color: #409EFF;"
+ >
+ {{ row[column.property] }}
+ </el-button>
+ <span v-else-if="column.property.includes('鏃堕棿') || column.property.includes('鏃ユ湡')">
+ {{ formatDate(row[column.property]) }}
+ </span>
+ <span v-else>{{ row[column.property] }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+
+
+ <el-pagination
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="pagination.page"
+ :page-sizes="[50, 100, 500, 5000]"
+ :page-size="pagination.size"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="pagination.total"
+ style="margin-top: 15px; text-align: right;"
+ />
+ </el-card>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import axios from 'axios'
+
+export default {
+ name: 'CurrencyDialog',
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ collapse: false,
+ loading: false,
+
+ queryParams: {
+ HNumber: '',
+ HName: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: ''
+ },
+
+ tableData: [],
+ tableColumns: [],
+ selectedRow: null,
+ multipleSelection: [],
+
+ pagination: {
+ page: 1,
+ size: 50,
+ total: 0
+ },
+
+ currentFilterScheme: '',
+ HInterID_Choose: 0,
+
+ hiddenFields: ["HItemID"],
+
+ baseURL: process.env.VUE_APP_BASE_URL || 'http://47.96.97.237/API/',
+ user: 'admin',
+ HModName: 'Gy_Currency',
+ HModuleName: '璐у竵鍒楄〃缁存姢'
+ }
+ },
+ computed: {
+ visibleColumns() {
+ return this.tableColumns
+ .filter(col => !this.hiddenFields.includes(col.field))
+ .map(col => ({
+ field: col.field,
+ label: col.label
+ }))
+ }
+ },
+ watch: {
+ visible: {
+ immediate: true,
+ handler(val) {
+ this.dialogVisible = val
+ if (val) {
+ this.initData()
+ }
+ }
+ },
+ dialogVisible(val) {
+ this.$emit('update:visible', val)
+ }
+ },
+ methods: {
+ // 鍒濆鍖栨暟鎹�
+ initData() {
+ this.loadTableData()
+ this.getDefaultFilterScheme()
+ },
+
+ async loadTableData() {
+ this.loading = true
+ try {
+ const sWhere = this.buildQueryCondition()
+
+ const response = await axios.get(`${this.baseURL}/Gy_Currency/list1`, {
+ params: {
+ sWhere: sWhere,
+ user: this.user,
+ page: this.pagination.page,
+ size: this.pagination.size
+ }
+ })
+
+ if (response.data.count === 1) {
+ this.tableData = response.data.data
+ this.pagination.total = response.data.total || response.data.data.length
+ this.generateTableColumns(response.data.list)
+ } else {
+ this.$message.error(response.data.Message || '鍔犺浇鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鍔犺浇璐у竵鏁版嵁澶辫触:', error)
+ this.$message.error('鍔犺浇璐у竵鏁版嵁澶辫触')
+ } finally {
+ this.loading = false
+ }
+ },
+
+ buildQueryCondition() {
+ let sWhere = ""
+
+ if (this.queryParams.HNumber) {
+ sWhere += ` and 璐у竵浠g爜 like '%${this.queryParams.HNumber}%'`
+ }
+ if (this.queryParams.HName) {
+ sWhere += ` and 璐у竵鍚嶇О like '%${this.queryParams.HName}%'`
+ }
+
+ if (this.queryParams.ColName && this.queryParams.ColName !== "0" &&
+ this.queryParams.Comparator && this.queryParams.Comparator !== "0") {
+ let com = ""
+ switch (this.queryParams.Comparator) {
+ case "7":
+ com = `like '%${this.queryParams.ColContent}%'`
+ break
+ case "8":
+ com = `like '%${this.queryParams.ColContent}'`
+ break
+ case "9":
+ com = `like '${this.queryParams.ColContent}%'`
+ break
+ case "10":
+ com = `not like '%${this.queryParams.ColContent}%'`
+ break
+ default:
+ com = `${this.queryParams.Comparator} '${this.queryParams.ColContent}'`
+ break
+ }
+ sWhere += ` and ${this.queryParams.ColName} ${com}`
+ }
+
+ sWhere += this.addSWhereByOpenType()
+
+ return sWhere
+ },
+
+ addSWhereByOpenType() {
+
+ return " and 绂佺敤鏍囪 = '' and 瀹℃牳浜� != ''"
+ },
+
+ // 鐢熸垚琛ㄦ牸鍒�
+ generateTableColumns(columnList) {
+ this.tableColumns = []
+
+ // 娣诲姞閫夋嫨鍒�
+ this.tableColumns.push({ type: 'selection', fixed: 'left' })
+
+ // 鍔ㄦ�佺敓鎴愬垪
+ if (columnList && columnList.length > 0) {
+ columnList.forEach(item => {
+ if (!this.hiddenFields.includes(item.ColmCols)) {
+ const column = {
+ field: item.ColmCols,
+ label: item.ColmCols,
+ align: 'center',
+ sortable: true,
+ width: 200
+ }
+
+ if (item.ColmType === 'DateTime') {
+ column.formatter = this.formatDate
+ }
+
+ this.tableColumns.push(column)
+ }
+ })
+ } else {
+ // 榛樿鍒楋紙濡傛灉鎺ュ彛娌℃湁杩斿洖鍒椾俊鎭級
+ const defaultColumns = [
+ { field: '璐у竵浠g爜', label: '璐у竵浠g爜', align: 'center', width: 120 },
+ { field: '璐у竵鍚嶇О', label: '璐у竵鍚嶇О', align: 'center', width: 120 },
+ { field: '灏忔暟浣�', label: '灏忔暟浣�', align: 'center', width: 100 },
+ { field: '姹囩巼', label: '姹囩巼', align: 'center', width: 100 },
+ { field: '绂佺敤鏍囪', label: '绂佺敤鏍囪', align: 'center', width: 100 },
+ { field: '澶囨敞', label: '澶囨敞', align: 'center', width: 150 },
+ { field: '浣跨敤鏍囪', label: '浣跨敤鏍囪', align: 'center', width: 100 },
+ { field: '瀹℃牳浜�', label: '瀹℃牳浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓浜�', label: '鍒涘缓浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓鏃堕棿', label: '鍒涘缓鏃堕棿', align: 'center', width: 150 }
+ ]
+ this.tableColumns = [...this.tableColumns, ...defaultColumns]
+ }
+ },
+
+ // 鏌ヨ
+ handleQuery() {
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 閲嶇疆鏌ヨ
+ handleReset() {
+ this.queryParams = {
+ HNumber: '',
+ HName: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: ''
+ }
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 鍒锋柊
+ handleRefresh() {
+ this.loadTableData()
+ },
+
+ // 鍒囨崲鎶樺彔鐘舵��
+ toggleCollapse() {
+ this.collapse = !this.collapse
+ },
+
+ // 琛屽弻鍑讳簨浠�
+ handleRowDblClick(row) {
+ this.selectedRow = row
+ this.confirmSelection()
+ },
+
+ // 琛岀偣鍑讳簨浠�
+ handleRowClick(row) {
+ this.$refs.table.toggleRowSelection(row)
+ this.selectedRow = row
+ },
+
+ handleCurrencyCodeClick(row) {
+ console.log('鐐瑰嚮璐у竵浠g爜:', row)
+ this.selectedRow = row
+ this.confirmSelection()
+ },
+
+ // 閫夋嫨鍙樺寲
+ handleSelectionChange(selection) {
+ this.multipleSelection = selection
+ if (selection.length === 1) {
+ this.selectedRow = selection[0]
+ }
+ },
+
+ // 纭閫夋嫨
+ confirmSelection() {
+ if (this.selectedRow) {
+ this.$emit('selected', {
+ HItemID: this.selectedRow.HItemID,
+ 璐у竵鍚嶇О: this.selectedRow.璐у竵鍚嶇О,
+ 姹囩巼: this.selectedRow.姹囩巼
+ })
+ this.dialogVisible = false
+ } else {
+ this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹�')
+ }
+ },
+
+ // 閫�鍑�
+ handleExit() {
+ this.dialogVisible = false
+ },
+
+ // 鍏抽棴瀵硅瘽妗�
+ handleClose(done) {
+ this.$confirm('纭鍏抽棴锛�')
+ .then(_ => {
+ done()
+ })
+ .catch(_ => {})
+ },
+
+ // 鍒嗛〉澶у皬鏀瑰彉
+ handleSizeChange(size) {
+ this.pagination.size = size
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 褰撳墠椤垫敼鍙�
+ handleCurrentChange(page) {
+ this.pagination.page = page
+ this.loadTableData()
+ },
+
+ // 鏍煎紡鍖栨棩鏈�
+ formatDate(dateString) {
+ if (!dateString) return ''
+ try {
+ const date = new Date(dateString)
+ return date.toLocaleDateString('zh-CN')
+ } catch (error) {
+ return dateString
+ }
+ },
+
+ // 鑾峰彇榛樿杩囨护鏂规
+ async getDefaultFilterScheme() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Xt_FastICScheme/Chooselist`, {
+ params: {
+ user: this.user,
+ HModuleName: this.HModuleName,
+ HInterID: 0,
+ Type: "Default"
+ }
+ })
+
+ if (response.data.count === 1) {
+ const data = response.data.data[0]
+ this.HInterID_Choose = data.hmainid
+ this.currentFilterScheme = `褰撳墠杩囨护鏂规锛�${data.鏂规鍚嶇О} (${data.澶囨敞})`
+
+ // 搴旂敤杩囨护鏉′欢
+ this.applyFilterConditions(response.data.data)
+ }
+ } catch (error) {
+ console.error('鑾峰彇杩囨护鏂规澶辫触:', error)
+ }
+ },
+
+ // 搴旂敤杩囨护鏉′欢
+ applyFilterConditions(filterData) {
+ filterData.forEach(item => {
+ if (this.queryParams.hasOwnProperty(item.杩囨护瀛楁ID)) {
+ this.queryParams[item.杩囨护瀛楁ID] = item.杩囨护鍊�
+ }
+ })
+ },
+
+ // 淇濆瓨杩囨护鏂规
+ handleSaveScheme() {
+ // 瀹炵幇淇濆瓨杩囨护鏂规鐨勯�昏緫
+ this.$message.info('淇濆瓨鏂规鍔熻兘')
+ },
+
+ // 璇诲彇杩囨护鏂规
+ handleReadScheme() {
+ // 瀹炵幇璇诲彇杩囨护鏂规鐨勯�昏緫
+ this.$message.info('璇诲彇鏂规鍔熻兘')
+ }
+ }
+}
+</script>
+
+<style scoped>
+.currency-dialog {
+ height: 70vh;
+ display: flex;
+ flex-direction: column;
+}
+
+.search-card {
+ margin-bottom: 15px;
+}
+
+.table-card {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.table-card >>> .el-card__body {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ content: "";
+}
+.clearfix:after {
+ clear: both;
+}
+
+.el-form-item {
+ margin-bottom: 15px;
+}
+
+.el-table {
+ flex: 1;
+}
+
+.filter-scheme {
+ text-align: center;
+ font-size: 15px;
+ font-weight: bold;
+ color: #fc9393;
+ margin: 10px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/component/CustomerTypeDialog/index.vue b/src/views/component/CustomerTypeDialog/index.vue
new file mode 100644
index 0000000..4e7b048
--- /dev/null
+++ b/src/views/component/CustomerTypeDialog/index.vue
@@ -0,0 +1,794 @@
+<template>
+ <el-dialog
+ title="閫夋嫨瀹㈡埛鍒嗙被"
+ :visible.sync="dialogVisible"
+ width="80%"
+ :before-close="handleClose"
+ append-to-body
+ >
+ <div class="customer-type-dialog">
+ <el-card class="search-card">
+ <div slot="header" class="clearfix">
+ <span>鏌ヨ鏉′欢</span>
+ <el-button
+ style="float: right; padding: 3px 0"
+ type="text"
+ @click="toggleCollapse"
+ >
+ {{ collapse ? '灞曞紑' : '鏀惰捣' }}
+ </el-button>
+ </div>
+
+ <el-form :model="queryParams" ref="queryForm" :inline="true">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="瀹㈡埛鍒嗙被浠g爜">
+ <el-input
+ v-model="queryParams.HNumber"
+ placeholder="璇疯緭鍏ュ鎴峰垎绫讳唬鐮�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瀹㈡埛鍒嗙被鍚嶇О">
+ <el-input
+ v-model="queryParams.HName"
+ placeholder="璇疯緭鍏ュ鎴峰垎绫诲悕绉�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" @click="handleQuery">鏌ヨ</el-button>
+ <el-button icon="el-icon-refresh" @click="handleReset">閲嶇疆</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-collapse-transition>
+ <div v-show="!collapse">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="杩囨护瀛楁">
+ <el-select v-model="queryParams.ColName" placeholder="璇烽�夋嫨瀛楁" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="column in visibleColumns"
+ :key="column.field"
+ :label="column.label"
+ :value="column.field"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="姣旇緝绗�">
+ <el-select v-model="queryParams.Comparator" placeholder="璇烽�夋嫨姣旇緝绗�" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option label="=" value="=" />
+ <el-option label=">=" value=">=" />
+ <el-option label=">" value=">" />
+ <el-option label="<=" value="<=" />
+ <el-option label="<" value="<" />
+ <el-option label="<>" value="<>" />
+ <el-option label="鍖呭惈" value="7" />
+ <el-option label="宸﹀寘鍚�" value="8" />
+ <el-option label="鍙冲寘鍚�" value="9" />
+ <el-option label="涓嶅寘鍚�" value="10" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍐呭">
+ <el-input
+ v-model="queryParams.ColContent"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="杩囨护瀛楁">
+ <el-select v-model="queryParams.ColName1" placeholder="璇烽�夋嫨瀛楁" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="column in visibleColumns"
+ :key="column.field"
+ :label="column.label"
+ :value="column.field"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="姣旇緝绗�">
+ <el-select v-model="queryParams.Comparator1" placeholder="璇烽�夋嫨姣旇緝绗�" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option label="=" value="=" />
+ <el-option label=">=" value=">=" />
+ <el-option label=">" value=">" />
+ <el-option label="<=" value="<=" />
+ <el-option label="<" value="<" />
+ <el-option label="<>" value="<>" />
+ <el-option label="鍖呭惈" value="7" />
+ <el-option label="宸﹀寘鍚�" value="8" />
+ <el-option label="鍙冲寘鍚�" value="9" />
+ <el-option label="涓嶅寘鍚�" value="10" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍐呭">
+ <el-input
+ v-model="queryParams.ColContent1"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="杩囨护瀛楁">
+ <el-select v-model="queryParams.ColName2" placeholder="璇烽�夋嫨瀛楁" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="column in visibleColumns"
+ :key="column.field"
+ :label="column.label"
+ :value="column.field"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="姣旇緝绗�">
+ <el-select v-model="queryParams.Comparator2" placeholder="璇烽�夋嫨姣旇緝绗�" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option label="=" value="=" />
+ <el-option label=">=" value=">=" />
+ <el-option label=">" value=">" />
+ <el-option label="<=" value="<=" />
+ <el-option label="<" value="<" />
+ <el-option label="<>" value="<>" />
+ <el-option label="鍖呭惈" value="7" />
+ <el-option label="宸﹀寘鍚�" value="8" />
+ <el-option label="鍙冲寘鍚�" value="9" />
+ <el-option label="涓嶅寘鍚�" value="10" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍐呭">
+ <el-input
+ v-model="queryParams.ColContent2"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ </el-collapse-transition>
+
+ <div v-if="currentFilterScheme" class="filter-scheme">
+ {{ currentFilterScheme }}
+ </div>
+ </el-form>
+ </el-card>
+
+ <div class="content-area">
+ <el-card class="tree-card">
+ <div slot="header">
+ <span>瀹㈡埛鍒嗙被鏍�</span>
+ </div>
+ <el-tree
+ ref="tree"
+ :data="treeData"
+ :props="treeProps"
+ node-key="id"
+ default-expand-all
+ :expand-on-click-node="false"
+ @node-click="handleTreeNodeClick"
+ :highlight-current="true"
+ style="height: 400px; overflow: auto;"
+ >
+ <span class="custom-tree-node" slot-scope="{ node, data }">
+ <span>{{ node.label }}</span>
+ </span>
+ </el-tree>
+ </el-card>
+
+
+ <el-card class="table-card">
+ <div slot="header" class="clearfix">
+ <span>瀹㈡埛鍒嗙被鍒楄〃</span>
+ <el-button-group style="float: right">
+ <el-button type="primary" icon="el-icon-refresh" @click="handleRefresh">鍒锋柊</el-button>
+ <el-button type="primary" icon="el-icon-close" @click="handleExit">閫�鍑�</el-button>
+ </el-button-group>
+ </div>
+
+ <el-table
+ ref="table"
+ :data="tableData"
+ v-loading="loading"
+ height="400"
+ border
+ highlight-current-row
+ @row-dblclick="handleRowDblClick"
+ @row-click="handleRowClick"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55" align="center" />
+ <el-table-column
+ v-for="column in tableColumns"
+ :key="column.field"
+ :prop="column.field"
+ :label="column.label"
+ :width="column.width"
+ :align="column.align"
+ :sortable="column.sortable"
+ show-overflow-tooltip
+ >
+ <template slot-scope="{ row, column }">
+ <!-- 瀹㈡埛鍒嗙被浠g爜鐗规畩澶勭悊锛屾樉绀轰负鍙偣鍑荤殑閾炬帴鏍峰紡 -->
+ <el-button
+ v-if="column.property === '瀹㈡埛鍒嗙被浠g爜'"
+ type="text"
+ @click="handleCustomerTypeCodeClick(row)"
+ style="color: #409EFF;"
+ >
+ {{ row[column.property] }}
+ </el-button>
+ <span v-else-if="column.property.includes('鏃堕棿') || column.property.includes('鏃ユ湡')">
+ {{ formatDate(row[column.property]) }}
+ </span>
+ <span v-else>{{ row[column.property] }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <!-- 鍒嗛〉 -->
+ <el-pagination
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="pagination.page"
+ :page-sizes="[50, 100, 500, 5000]"
+ :page-size="pagination.size"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="pagination.total"
+ style="margin-top: 15px; text-align: right;"
+ />
+ </el-card>
+ </div>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import axios from 'axios'
+
+export default {
+ name: 'CustomerTypeDialog',
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ collapse: false,
+ loading: false,
+ treeLoading: false,
+
+ // 鏌ヨ鍙傛暟
+ queryParams: {
+ HNumber: '',
+ HName: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: '',
+ ColName1: '0',
+ Comparator1: '0',
+ ColContent1: '',
+ ColName2: '0',
+ Comparator2: '0',
+ ColContent2: ''
+ },
+
+ // 鏍戝舰鏁版嵁
+ treeData: [],
+ treeProps: {
+ children: 'children',
+ label: 'title'
+ },
+
+ // 琛ㄦ牸鏁版嵁
+ tableData: [],
+ tableColumns: [],
+ selectedRow: null,
+ multipleSelection: [],
+
+ // 鍒嗛〉
+ pagination: {
+ page: 1,
+ size: 50,
+ total: 0
+ },
+
+ // 杩囨护鏂规
+ currentFilterScheme: '',
+ HInterID_Choose: 0,
+
+ // 闅愯棌瀛楁
+ hiddenFields: ["HItemID"],
+
+ baseURL: process.env.VUE_APP_BASE_URL || 'http://47.96.97.237/API/',
+ user: 'admin',
+ HModName: 'Gy_CusType',
+ HModuleName: '瀹㈡埛鍒嗙被鍒楄〃缁存姢'
+ }
+ },
+ computed: {
+ visibleColumns() {
+ return this.tableColumns
+ .filter(col => !this.hiddenFields.includes(col.field))
+ .map(col => ({
+ field: col.field,
+ label: col.label
+ }))
+ }
+ },
+ watch: {
+ visible: {
+ immediate: true,
+ handler(val) {
+ this.dialogVisible = val
+ if (val) {
+ this.initData()
+ }
+ }
+ },
+ dialogVisible(val) {
+ this.$emit('update:visible', val)
+ }
+ },
+ methods: {
+ // 鍒濆鍖栨暟鎹�
+ initData() {
+ this.loadTreeData()
+ this.loadTableData()
+ this.getDefaultFilterScheme()
+ },
+
+ // 鍔犺浇鏍戝舰鏁版嵁
+ async loadTreeData() {
+ this.treeLoading = true
+ try {
+ const response = await axios.get(`${this.baseURL}/Gy_BadReason/Gy_CusTypeTreeListByLevel`)
+
+ if (response.data.count === 1) {
+ this.treeData = JSON.parse(response.data.data)
+ } else {
+ this.$message.error(response.data.Message || '鍔犺浇鏍戝舰鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鍔犺浇瀹㈡埛鍒嗙被鏍戝舰鏁版嵁澶辫触:', error)
+ this.$message.error('鍔犺浇瀹㈡埛鍒嗙被鏍戝舰鏁版嵁澶辫触')
+ } finally {
+ this.treeLoading = false
+ }
+ },
+
+ // 鍔犺浇琛ㄦ牸鏁版嵁
+ async loadTableData() {
+ this.loading = true
+ try {
+ const sWhere = this.buildQueryCondition()
+
+ const response = await axios.get(`${this.baseURL}/Gy_BadReason/Gy_CusTypeList`, {
+ params: {
+ sWhere: sWhere,
+ user: this.user,
+ page: this.pagination.page,
+ size: this.pagination.size
+ }
+ })
+
+ if (response.data.count === 1) {
+ this.tableData = response.data.data
+ this.pagination.total = response.data.total || response.data.data.length
+ this.generateTableColumns(response.data.list)
+ } else {
+ this.$message.error(response.data.Message || '鍔犺浇鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鍔犺浇瀹㈡埛鍒嗙被鏁版嵁澶辫触:', error)
+ this.$message.error('鍔犺浇瀹㈡埛鍒嗙被鏁版嵁澶辫触')
+ } finally {
+ this.loading = false
+ }
+ },
+
+ // 鏋勫缓鏌ヨ鏉′欢
+ buildQueryCondition() {
+ let sWhere = ""
+
+ // 鍩烘湰鏌ヨ鏉′欢
+ if (this.queryParams.HNumber) {
+ sWhere += ` and 瀹㈡埛鍒嗙被浠g爜 like '%${this.queryParams.HNumber}%'`
+ }
+ if (this.queryParams.HName) {
+ sWhere += ` and 瀹㈡埛鍒嗙被鍚嶇О like '%${this.queryParams.HName}%'`
+ }
+
+ // 澶勭悊涓夌粍杩囨护鏉′欢
+ const filterGroups = [
+ { colName: this.queryParams.ColName, comparator: this.queryParams.Comparator, content: this.queryParams.ColContent },
+ { colName: this.queryParams.ColName1, comparator: this.queryParams.Comparator1, content: this.queryParams.ColContent1 },
+ { colName: this.queryParams.ColName2, comparator: this.queryParams.Comparator2, content: this.queryParams.ColContent2 }
+ ]
+
+ filterGroups.forEach(filter => {
+ if (filter.colName && filter.colName !== "0" &&
+ filter.comparator && filter.comparator !== "0") {
+ let com = ""
+ switch (filter.comparator) {
+ case "7":
+ com = `like '%${filter.content}%'`
+ break
+ case "8":
+ com = `like '%${filter.content}'`
+ break
+ case "9":
+ com = `like '${filter.content}%'`
+ break
+ case "10":
+ com = `not like '%${filter.content}%'`
+ break
+ default:
+ com = `${filter.comparator} '${filter.content}'`
+ break
+ }
+ sWhere += ` and ${filter.colName} ${com}`
+ }
+ })
+
+ // 娣诲姞鎵撳紑绫诲瀷鐨勮繃婊ゆ潯浠�
+ sWhere += this.addSWhereByOpenType()
+
+ return sWhere
+ },
+
+ // 鏍规嵁鎵撳紑绫诲瀷娣诲姞鏉′欢
+ addSWhereByOpenType() {
+ // 杩欓噷鍙互鏍规嵁闇�瑕佹坊鍔犵壒瀹氱殑杩囨护鏉′欢
+ return " and 绂佺敤鏍囧織 = '鍚�' and 瀹℃牳浜� != ''"
+ },
+
+ // 鐢熸垚琛ㄦ牸鍒�
+ generateTableColumns(columnList) {
+ this.tableColumns = []
+
+ // 娣诲姞閫夋嫨鍒�
+ this.tableColumns.push({ type: 'selection', fixed: 'left' })
+
+ // 鍔ㄦ�佺敓鎴愬垪
+ if (columnList && columnList.length > 0) {
+ columnList.forEach(item => {
+ if (!this.hiddenFields.includes(item.ColmCols)) {
+ const column = {
+ field: item.ColmCols,
+ label: item.ColmCols,
+ align: 'center',
+ sortable: true,
+ width: 200
+ }
+
+ // 鏍规嵁瀛楁绫诲瀷璁剧疆涓嶅悓鐨勬ā鏉�
+ if (item.ColmType === 'DateTime') {
+ column.formatter = this.formatDate
+ }
+
+ this.tableColumns.push(column)
+ }
+ })
+ } else {
+ const defaultColumns = [
+ { field: '瀹㈡埛鍒嗙被浠g爜', label: '瀹㈡埛鍒嗙被浠g爜', align: 'center', width: 120 },
+ { field: '瀹㈡埛鍒嗙被鍚嶇О', label: '瀹㈡埛鍒嗙被鍚嶇О', align: 'center', width: 120 },
+ { field: '鏉$爜缂栧彿', label: '鏉$爜缂栧彿', align: 'center', width: 120 },
+ { field: '绂佺敤鏍囪', label: '绂佺敤鏍囪', align: 'center', width: 100 },
+ { field: '澶囨敞', label: '澶囨敞', align: 'center', width: 150 },
+ { field: '瀹℃牳浜�', label: '瀹℃牳浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓浜�', label: '鍒涘缓浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓鏃堕棿', label: '鍒涘缓鏃堕棿', align: 'center', width: 150 }
+ ]
+ this.tableColumns = [...this.tableColumns, ...defaultColumns]
+ }
+ },
+
+ handleTreeNodeClick(data) {
+ let sWhere = ""
+ if (data.id !== '0') {
+ sWhere = ` and 鐖剁骇ID = '${data.id}' or HItemID = '${data.id}'`
+ }
+ this.loadTableDataWithCondition(sWhere)
+ },
+
+ async loadTableDataWithCondition(sWhere) {
+ this.loading = true
+ try {
+ const response = await axios.get(`${this.baseURL}/Gy_BadReason/Gy_CusTypeList`, {
+ params: {
+ sWhere: sWhere,
+ user: this.user
+ }
+ })
+
+ if (response.data.count === 1) {
+ this.tableData = response.data.data
+ this.pagination.total = response.data.total || response.data.data.length
+ }
+ } catch (error) {
+ console.error('鍔犺浇鏁版嵁澶辫触:', error)
+ } finally {
+ this.loading = false
+ }
+ },
+
+ handleQuery() {
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ handleReset() {
+ this.queryParams = {
+ HNumber: '',
+ HName: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: '',
+ ColName1: '0',
+ Comparator1: '0',
+ ColContent1: '',
+ ColName2: '0',
+ Comparator2: '0',
+ ColContent2: ''
+ }
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 鍒锋柊
+ handleRefresh() {
+ this.loadTreeData()
+ this.loadTableData()
+ },
+
+
+ toggleCollapse() {
+ this.collapse = !this.collapse
+ },
+
+ // 琛屽弻鍑讳簨浠�
+ handleRowDblClick(row) {
+ this.selectedRow = row
+ this.confirmSelection()
+ },
+
+ // 琛岀偣鍑讳簨浠�
+ handleRowClick(row) {
+ this.$refs.table.toggleRowSelection(row)
+ this.selectedRow = row
+ },
+
+ handleCustomerTypeCodeClick(row) {
+ console.log('鐐瑰嚮瀹㈡埛鍒嗙被浠g爜:', row)
+ this.selectedRow = row
+ this.confirmSelection()
+ },
+
+
+ handleSelectionChange(selection) {
+ this.multipleSelection = selection
+ if (selection.length === 1) {
+ this.selectedRow = selection[0]
+ }
+ },
+
+
+ confirmSelection() {
+ if (this.selectedRow) {
+ this.$emit('selected', {
+ HItemID: this.selectedRow.HItemID,
+ 瀹㈡埛鍒嗙被鍚嶇О: this.selectedRow.瀹㈡埛鍒嗙被鍚嶇О
+ })
+ this.dialogVisible = false
+ } else {
+ this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹�')
+ }
+ },
+
+ // 閫�鍑�
+ handleExit() {
+ this.dialogVisible = false
+ },
+
+ // 鍏抽棴瀵硅瘽妗�
+ handleClose(done) {
+ this.$confirm('纭鍏抽棴锛�')
+ .then(_ => {
+ done()
+ })
+ .catch(_ => {})
+ },
+
+ // 鍒嗛〉澶у皬鏀瑰彉
+ handleSizeChange(size) {
+ this.pagination.size = size
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 褰撳墠椤垫敼鍙�
+ handleCurrentChange(page) {
+ this.pagination.page = page
+ this.loadTableData()
+ },
+
+ // 鏍煎紡鍖栨棩鏈�
+ formatDate(dateString) {
+ if (!dateString) return ''
+ try {
+ const date = new Date(dateString)
+ return date.toLocaleDateString('zh-CN')
+ } catch (error) {
+ return dateString
+ }
+ },
+
+ // 鑾峰彇榛樿杩囨护鏂规
+ async getDefaultFilterScheme() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Xt_FastICScheme/Chooselist`, {
+ params: {
+ user: this.user,
+ HModuleName: this.HModuleName,
+ HInterID: 0,
+ Type: "Default"
+ }
+ })
+
+ if (response.data.count === 1) {
+ const data = response.data.data[0]
+ this.HInterID_Choose = data.hmainid
+ this.currentFilterScheme = `褰撳墠杩囨护鏂规锛�${data.鏂规鍚嶇О} (${data.澶囨敞})`
+
+ // 搴旂敤杩囨护鏉′欢
+ this.applyFilterConditions(response.data.data)
+ }
+ } catch (error) {
+ console.error('鑾峰彇杩囨护鏂规澶辫触:', error)
+ }
+ },
+
+ // 搴旂敤杩囨护鏉′欢
+ applyFilterConditions(filterData) {
+ filterData.forEach(item => {
+ if (this.queryParams.hasOwnProperty(item.杩囨护瀛楁ID)) {
+ this.queryParams[item.杩囨护瀛楁ID] = item.杩囨护鍊�
+ }
+ })
+ },
+
+ // 淇濆瓨杩囨护鏂规
+ handleSaveScheme() {
+ this.$message.info('淇濆瓨鏂规鍔熻兘')
+ },
+
+ // 璇诲彇杩囨护鏂规
+ handleReadScheme() {
+ this.$message.info('璇诲彇鏂规鍔熻兘')
+ },
+
+ // 鍒楄缃�
+ handleColumnSetting() {
+ this.$message.info('鍒楄缃姛鑳�')
+ }
+ }
+}
+</script>
+
+<style scoped>
+.customer-type-dialog {
+ height: 80vh;
+ display: flex;
+ flex-direction: column;
+}
+
+.search-card {
+ margin-bottom: 15px;
+}
+
+.content-area {
+ flex: 1;
+ display: flex;
+ gap: 15px;
+}
+
+.tree-card {
+ width: 25%;
+ display: flex;
+ flex-direction: column;
+}
+
+.table-card {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.table-card >>> .el-card__body {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.tree-card >>> .el-card__body {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ content: "";
+}
+.clearfix:after {
+ clear: both;
+}
+
+.el-form-item {
+ margin-bottom: 15px;
+}
+
+.el-table {
+ flex: 1;
+}
+
+.filter-scheme {
+ text-align: center;
+ font-size: 15px;
+ font-weight: bold;
+ color: #fc9393;
+ margin: 10px 0;
+}
+
+.custom-tree-node {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 14px;
+ padding-right: 8px;
+}
+
+/* 鏍戣妭鐐归�変腑鏍峰紡 */
+.el-tree >>> .el-tree-node.is-current > .el-tree-node__content {
+ background-color: #aef0f7;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/component/SettleStyleDialog/index.vue b/src/views/component/SettleStyleDialog/index.vue
new file mode 100644
index 0000000..e15d97a
--- /dev/null
+++ b/src/views/component/SettleStyleDialog/index.vue
@@ -0,0 +1,609 @@
+<template>
+ <el-dialog
+ title="閫夋嫨缁撶畻鏂瑰紡"
+ :visible.sync="dialogVisible"
+ width="80%"
+ :before-close="handleClose"
+ append-to-body
+ >
+ <div class="settle-style-dialog">
+ <!-- 鎼滅储鍖哄煙 -->
+ <el-card class="search-card">
+ <div slot="header" class="clearfix">
+ <span>鏌ヨ鏉′欢</span>
+ <el-button
+ style="float: right; padding: 3px 0"
+ type="text"
+ @click="toggleCollapse"
+ >
+ {{ collapse ? '灞曞紑' : '鏀惰捣' }}
+ </el-button>
+ </div>
+
+ <el-form :model="queryParams" ref="queryForm" :inline="true">
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <el-form-item label="浠g爜">
+ <el-input
+ v-model="queryParams.HNumber"
+ placeholder="璇疯緭鍏ヤ唬鐮�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="鍚嶇О">
+ <el-input
+ v-model="queryParams.HName"
+ placeholder="璇疯緭鍏ュ悕绉�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="缁撶畻鏂瑰紡浠g爜">
+ <el-input
+ v-model="queryParams.HNumber2"
+ placeholder="璇疯緭鍏ョ粨绠楁柟寮忎唬鐮�"
+ clearable
+ style="width: 190px"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" @click="handleQuery">鏌ヨ</el-button>
+ <el-button icon="el-icon-refresh" @click="handleReset">閲嶇疆</el-button>
+ <el-button type="primary" @click="handleResCnz" style="margin-left: 10px">閲嶆柊鍚屾</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 楂樼骇鎼滅储 -->
+ <el-collapse-transition>
+ <div v-show="!collapse">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="杩囨护瀛楁">
+ <el-select v-model="queryParams.ColName" placeholder="璇烽�夋嫨瀛楁" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="column in visibleColumns"
+ :key="column.field"
+ :label="column.label"
+ :value="column.field"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="姣旇緝绗�">
+ <el-select v-model="queryParams.Comparator" placeholder="璇烽�夋嫨姣旇緝绗�" style="width: 100%">
+ <el-option value="0" label=""></el-option>
+ <el-option label="=" value="=" />
+ <el-option label=">=" value=">=" />
+ <el-option label=">" value=">" />
+ <el-option label="<=" value="<=" />
+ <el-option label="<" value="<" />
+ <el-option label="<>" value="<>" />
+ <el-option label="鍖呭惈" value="7" />
+ <el-option label="宸﹀寘鍚�" value="8" />
+ <el-option label="鍙冲寘鍚�" value="9" />
+ <el-option label="涓嶅寘鍚�" value="10" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍐呭">
+ <el-input
+ v-model="queryParams.ColContent"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ </el-collapse-transition>
+
+ <!-- 褰撳墠杩囨护鏂规鏄剧ず -->
+ <div v-if="currentFilterScheme" class="filter-scheme">
+ {{ currentFilterScheme }}
+ </div>
+ </el-form>
+ </el-card>
+
+ <!-- 琛ㄦ牸鍖哄煙 -->
+ <el-card class="table-card">
+ <div slot="header" class="clearfix">
+ <span>缁撶畻鏂瑰紡鍒楄〃</span>
+ <el-button-group style="float: right">
+ <el-button type="primary" icon="el-icon-refresh" @click="handleRefresh">鍒锋柊</el-button>
+ <el-button type="primary" icon="el-icon-close" @click="handleExit">閫�鍑�</el-button>
+ </el-button-group>
+ </div>
+
+ <el-table
+ ref="table"
+ :data="tableData"
+ v-loading="loading"
+ height="400"
+ border
+ highlight-current-row
+ @row-dblclick="handleRowDblClick"
+ @row-click="handleRowClick"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55" align="center" />
+ <el-table-column
+ v-for="column in tableColumns"
+ :key="column.field"
+ :prop="column.field"
+ :label="column.label"
+ :width="column.width"
+ :align="column.align"
+ :sortable="column.sortable"
+ show-overflow-tooltip
+ >
+ <template slot-scope="{ row, column }">
+ <span v-if="column.property.includes('鏃堕棿') || column.property.includes('鏃ユ湡')">
+ {{ formatDate(row[column.property]) }}
+ </span>
+ <span v-else>{{ row[column.property] }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <!-- 鍒嗛〉 -->
+ <el-pagination
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="pagination.page"
+ :page-sizes="[50, 100, 500, 5000]"
+ :page-size="pagination.size"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="pagination.total"
+ style="margin-top: 15px; text-align: right;"
+ />
+ </el-card>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import axios from 'axios'
+
+export default {
+ name: 'SettleStyleDialog',
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ collapse: false,
+ loading: false,
+
+ // 鏌ヨ鍙傛暟
+ queryParams: {
+ HNumber: '',
+ HName: '',
+ HNumber2: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: ''
+ },
+
+ // 琛ㄦ牸鏁版嵁
+ tableData: [],
+ tableColumns: [],
+ selectedRow: null,
+ multipleSelection: [],
+
+ // 鍒嗛〉
+ pagination: {
+ page: 1,
+ size: 50,
+ total: 0
+ },
+
+ // 杩囨护鏂规
+ currentFilterScheme: '',
+ HInterID_Choose: 0,
+
+ // 闅愯棌瀛楁
+ hiddenFields: ["HItemID", "HUSEORGID", "HCREATEORGID", "鐖剁骇ID"],
+
+ baseURL: process.env.VUE_APP_BASE_URL || 'http://47.96.97.237/API/',
+ user: 'admin',
+ HModName: 'Gy_SettleStyle',
+ HModuleName: '缁撶畻鏂瑰紡缁存姢',
+ Organization: '100038'
+ }
+ },
+ computed: {
+ visibleColumns() {
+ return this.tableColumns
+ .filter(col => !this.hiddenFields.includes(col.field))
+ .map(col => ({
+ field: col.field,
+ label: col.label
+ }))
+ }
+ },
+ watch: {
+ visible: {
+ immediate: true,
+ handler(val) {
+ this.dialogVisible = val
+ if (val) {
+ this.initData()
+ }
+ }
+ },
+ dialogVisible(val) {
+ this.$emit('update:visible', val)
+ }
+ },
+ methods: {
+ // 鍒濆鍖栨暟鎹�
+ initData() {
+ this.loadTableData()
+ this.getDefaultFilterScheme()
+ },
+
+ // 鍔犺浇琛ㄦ牸鏁版嵁
+ async loadTableData() {
+ this.loading = true
+ try {
+ const sWhere = this.buildQueryCondition()
+
+ const response = await axios.get(`${this.baseURL}/Gy_SettleStyle/SettleStyleList`, {
+ params: {
+ sWhere: sWhere,
+ user: this.user,
+ Organization: this.Organization
+ }
+ })
+
+ if (response.data.count === 1) {
+ this.tableData = response.data.data
+ console.log('缁撶畻鏂瑰紡鏁版嵁:', this.tableData)
+ this.pagination.total = response.data.total || response.data.data.length
+ this.generateTableColumns(response.data.list)
+ } else {
+ this.$message.error(response.data.Message || '鍔犺浇鏁版嵁澶辫触')
+ }
+ } catch (error) {
+ console.error('鍔犺浇缁撶畻鏂瑰紡鏁版嵁澶辫触:', error)
+ this.$message.error('鍔犺浇缁撶畻鏂瑰紡鏁版嵁澶辫触')
+ } finally {
+ this.loading = false
+ }
+ },
+
+ // 鏋勫缓鏌ヨ鏉′欢
+ buildQueryCondition() {
+ let sWhere = ""
+
+ // 鍩烘湰鏌ヨ鏉′欢
+ if (this.queryParams.HNumber) {
+ sWhere += ` and 缁撶畻鏂瑰紡浠g爜 like '%${this.queryParams.HNumber}%'`
+ }
+ if (this.queryParams.HName) {
+ sWhere += ` and 缁撶畻鏂瑰紡鍚嶇О like '%${this.queryParams.HName}%'`
+ }
+
+ // 楂樼骇杩囨护鏉′欢
+ if (this.queryParams.ColName && this.queryParams.ColName !== "0" &&
+ this.queryParams.Comparator && this.queryParams.Comparator !== "0") {
+ let com = ""
+ switch (this.queryParams.Comparator) {
+ case "7":
+ com = `like '%${this.queryParams.ColContent}%'`
+ break
+ case "8":
+ com = `like '%${this.queryParams.ColContent}'`
+ break
+ case "9":
+ com = `like '${this.queryParams.ColContent}%'`
+ break
+ case "10":
+ com = `not like '%${this.queryParams.ColContent}%'`
+ break
+ default:
+ com = `${this.queryParams.Comparator} '${this.queryParams.ColContent}'`
+ break
+ }
+ sWhere += ` and ${this.queryParams.ColName} ${com}`
+ }
+
+ // 娣诲姞鎵撳紑绫诲瀷鐨勮繃婊ゆ潯浠�
+ sWhere += this.addSWhereByOpenType()
+
+ return sWhere
+ },
+
+ // 鏍规嵁鎵撳紑绫诲瀷娣诲姞鏉′欢
+ addSWhereByOpenType() {
+ // 杩欓噷鍙互鏍规嵁闇�瑕佹坊鍔犵壒瀹氱殑杩囨护鏉′欢
+ return " and 绂佺敤鏍囪 = ''"
+ },
+
+ // 鐢熸垚琛ㄦ牸鍒�
+ generateTableColumns(columnList) {
+ this.tableColumns = []
+
+ // 娣诲姞閫夋嫨鍒�
+ this.tableColumns.push({ type: 'selection', fixed: 'left' })
+
+ // 鍔ㄦ�佺敓鎴愬垪
+ if (columnList && columnList.length > 0) {
+ columnList.forEach(item => {
+ if (!this.hiddenFields.includes(item.ColmCols)) {
+ const column = {
+ field: item.ColmCols,
+ label: item.ColmCols,
+ align: 'center',
+ sortable: true,
+ width: 200
+ }
+
+ // 鏍规嵁瀛楁绫诲瀷璁剧疆涓嶅悓鐨勬ā鏉�
+ if (item.ColmType === 'DateTime') {
+ column.formatter = this.formatDate
+ }
+
+ this.tableColumns.push(column)
+ }
+ })
+ } else {
+ // 榛樿鍒楋紙濡傛灉鎺ュ彛娌℃湁杩斿洖鍒椾俊鎭級
+ const defaultColumns = [
+ { field: '缁撶畻鏂瑰紡浠g爜', label: '缁撶畻鏂瑰紡浠g爜', align: 'center', width: 120 },
+ { field: '缁撶畻鏂瑰紡鍚嶇О', label: '缁撶畻鏂瑰紡鍚嶇О', align: 'center', width: 120 },
+ { field: '鏉$爜缂栧彿', label: '鏉$爜缂栧彿', align: 'center', width: 120 },
+ { field: '绂佺敤鏍囪', label: '绂佺敤鏍囪', align: 'center', width: 100 },
+ { field: '澶囨敞', label: '澶囨敞', align: 'center', width: 150 },
+ { field: '瀹℃牳浜�', label: '瀹℃牳浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓浜�', label: '鍒涘缓浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓鏃堕棿', label: '鍒涘缓鏃堕棿', align: 'center', width: 150 }
+ ]
+ this.tableColumns = [...this.tableColumns, ...defaultColumns]
+ }
+ },
+
+ // 鏌ヨ
+ handleQuery() {
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 閲嶇疆鏌ヨ
+ handleReset() {
+ this.queryParams = {
+ HNumber: '',
+ HName: '',
+ HNumber2: '',
+ ColName: '0',
+ Comparator: '0',
+ ColContent: ''
+ }
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 閲嶆柊鍚屾
+ async handleResCnz() {
+ if (!this.queryParams.HNumber2) {
+ this.$message.warning('璇疯緭鍏ョ粨绠楁柟寮忎唬鐮�')
+ return
+ }
+
+ try {
+ const response = await axios.get(`${this.baseURL}/Gy_SettleStyle/Gy_SettleStyleViewApi`, {
+ params: {
+ Number: this.queryParams.HNumber2,
+ Type: 'JSFS'
+ }
+ })
+
+ if (response.data.count === 1) {
+ this.$message.success(response.data.Message)
+ this.loadTableData() // 閲嶆柊鍔犺浇鏁版嵁
+ } else {
+ this.$message.error(response.data.Message)
+ }
+ } catch (error) {
+ console.error('閲嶆柊鍚屾澶辫触:', error)
+ this.$message.error('閲嶆柊鍚屾澶辫触')
+ }
+ },
+
+ // 鍒锋柊
+ handleRefresh() {
+ this.loadTableData()
+ },
+
+ // 鍒囨崲鎶樺彔鐘舵��
+ toggleCollapse() {
+ this.collapse = !this.collapse
+ },
+
+ // 琛屽弻鍑讳簨浠�
+ handleRowDblClick(row) {
+ this.selectedRow = row
+ this.confirmSelection()
+ },
+
+ // 琛岀偣鍑讳簨浠�
+ handleRowClick(row) {
+ this.$refs.table.toggleRowSelection(row)
+ this.selectedRow = row
+ },
+
+ // 閫夋嫨鍙樺寲
+ handleSelectionChange(selection) {
+ this.multipleSelection = selection
+ if (selection.length === 1) {
+ this.selectedRow = selection[0]
+ }
+ },
+
+ // 纭閫夋嫨
+ confirmSelection() {
+ if (this.selectedRow) {
+ this.$emit('selected', {
+ HItemID: this.selectedRow.HItemID,
+ 缁撶畻鏂瑰紡鍚嶇О: this.selectedRow.缁撶畻鏂瑰紡鍚嶇О
+ })
+ this.dialogVisible = false
+ } else {
+ this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹�')
+ }
+ },
+
+ // 閫�鍑�
+ handleExit() {
+ this.dialogVisible = false
+ },
+
+ // 鍏抽棴瀵硅瘽妗�
+ handleClose(done) {
+ this.$confirm('纭鍏抽棴锛�')
+ .then(_ => {
+ done()
+ })
+ .catch(_ => {})
+ },
+
+ // 鍒嗛〉澶у皬鏀瑰彉
+ handleSizeChange(size) {
+ this.pagination.size = size
+ this.pagination.page = 1
+ this.loadTableData()
+ },
+
+ // 褰撳墠椤垫敼鍙�
+ handleCurrentChange(page) {
+ this.pagination.page = page
+ this.loadTableData()
+ },
+
+ // 鏍煎紡鍖栨棩鏈�
+ formatDate(dateString) {
+ if (!dateString) return ''
+ try {
+ const date = new Date(dateString)
+ return date.toLocaleDateString('zh-CN')
+ } catch (error) {
+ return dateString
+ }
+ },
+
+ // 鑾峰彇榛樿杩囨护鏂规
+ async getDefaultFilterScheme() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Xt_FastICScheme/Chooselist`, {
+ params: {
+ user: this.user,
+ HModuleName: this.HModuleName,
+ HInterID: 0,
+ Type: "Default"
+ }
+ })
+
+ if (response.data.count === 1) {
+ const data = response.data.data[0]
+ this.HInterID_Choose = data.hmainid
+ this.currentFilterScheme = `褰撳墠杩囨护鏂规锛�${data.鏂规鍚嶇О} (${data.澶囨敞})`
+
+ // 搴旂敤杩囨护鏉′欢
+ this.applyFilterConditions(response.data.data)
+ }
+ } catch (error) {
+ console.error('鑾峰彇杩囨护鏂规澶辫触:', error)
+ }
+ },
+
+ // 搴旂敤杩囨护鏉′欢
+ applyFilterConditions(filterData) {
+ filterData.forEach(item => {
+ if (this.queryParams.hasOwnProperty(item.杩囨护瀛楁ID)) {
+ this.queryParams[item.杩囨护瀛楁ID] = item.杩囨护鍊�
+ }
+ })
+ },
+
+ // 淇濆瓨杩囨护鏂规
+ handleSaveScheme() {
+ this.$message.info('淇濆瓨鏂规鍔熻兘')
+ },
+
+ // 璇诲彇杩囨护鏂规
+ handleReadScheme() {
+ this.$message.info('璇诲彇鏂规鍔熻兘')
+ },
+
+ // 鍒楄缃�
+ handleColumnSetting() {
+ this.$message.info('鍒楄缃姛鑳�')
+ }
+ }
+}
+</script>
+
+<style scoped>
+.settle-style-dialog {
+ height: 70vh;
+ display: flex;
+ flex-direction: column;
+}
+
+.search-card {
+ margin-bottom: 15px;
+}
+
+.table-card {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.table-card >>> .el-card__body {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ content: "";
+}
+.clearfix:after {
+ clear: both;
+}
+
+.el-form-item {
+ margin-bottom: 15px;
+}
+
+.el-table {
+ flex: 1;
+}
+
+.filter-scheme {
+ text-align: center;
+ font-size: 15px;
+ font-weight: bold;
+ color: #fc9393;
+ margin: 10px 0;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gyMaterial/GyMaterial.vue b/src/views/gyMaterial/GyMaterial.vue
new file mode 100644
index 0000000..b1246a2
--- /dev/null
+++ b/src/views/gyMaterial/GyMaterial.vue
@@ -0,0 +1,1441 @@
+<template>
+ <div style="padding: 10px">
+ <el-card style="margin-bottom: 10px;">
+ <el-form :inline="true" :model="queryParams" ref="queryForm" class="mb8">
+ <el-form-item label="鐗╂枡浠g爜" prop="HNumber">
+ <el-input
+ v-model="queryParams.HNumber"
+ placeholder="璇疯緭鍏ョ墿鏂欎唬鐮�"
+ style="width: 160px"
+ />
+ </el-form-item>
+ <el-form-item label="鐗╂枡鍚嶇О" prop="HName">
+ <el-input
+ v-model="queryParams.HName"
+ placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"
+ style="width: 160px"
+ />
+ </el-form-item>
+ <el-form-item label="缁勭粐鍚嶇О" prop="HOrgID">
+ <el-select
+ v-model="queryParams.HOrgID"
+ placeholder="璇烽�夋嫨缁勭粐"
+ style="width: 160px"
+ >
+ <el-option
+ v-for="item in organizationOptions"
+ :key="item.ID"
+ :label="item.Name"
+ :value="item.ID"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="椤圭洰鍙�" prop="HProject">
+ <el-select
+ v-model="queryParams.HProject"
+ placeholder="璇烽�夋嫨椤圭洰鍙�"
+ style="width: 160px"
+ >
+ <el-option
+ v-for="item in projectOptions"
+ :key="item.HName"
+ :label="item.HName"
+ :value="item.HName"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="閲嶆柊鍚屾">
+ <el-input
+ v-model="queryParams.HNumber2"
+ placeholder="璇疯緭鍏ョ墿鏂欎唬鐮�"
+ style="width: 160px"
+ />
+ <el-button type="primary" @click="handleResCnz" style="margin-left: 10px">閲嶆柊鍚屾</el-button>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" @click="handleQuery">鎼滅储</el-button>
+ <el-button @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ </el-form>
+ <el-form :model="queryParams" ref="filterForm">
+ <el-collapse v-model="activeCollapse" class="filter-collapse">
+ <el-collapse-item title="鏇村" name="more">
+ <el-form-item label="瑙勬牸鍨嬪彿" prop="HModel">
+ <el-input
+ v-model="queryParams.HModel"
+ placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+ style="width: 160px"
+ />
+ </el-form-item>
+ <el-card class="box-card" style="margin-top: 20px;">
+ <div slot="header" class="clearfix"><span>杩囨护</span></div>
+ <div>
+ <el-form-item label-width="0">
+ <el-row>
+ <el-col :span="7">
+ <el-select
+ v-model="queryParams.ColName"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in visibleColumns"
+ :key="index"
+ :label="item.title"
+ :value="item.field"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="6" style="padding: 0 10px">
+ <el-select
+ v-model="queryParams.Comparator"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in comparatorList"
+ :key="index"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="11">
+ <el-input
+ v-model="queryParams.ColContent"
+ placeholder="璇疯緭鍏�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-col>
+ </el-row>
+ </el-form-item>
+ <el-form-item label-width="0">
+ <el-row>
+ <el-col :span="7">
+ <el-select
+ v-model="queryParams.ColName1"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in visibleColumns"
+ :key="index"
+ :label="item.title"
+ :value="item.field"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="6" style="padding: 0 10px">
+ <el-select
+ v-model="queryParams.Comparator1"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in comparatorList"
+ :key="index"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="11">
+ <el-input
+ v-model="queryParams.ColContent1"
+ placeholder="璇疯緭鍏�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-col>
+ </el-row>
+ </el-form-item>
+ <el-form-item label-width="0">
+ <el-row>
+ <el-col :span="7">
+ <el-select
+ v-model="queryParams.ColName2"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in visibleColumns"
+ :key="index"
+ :label="item.title"
+ :value="item.field"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="6" style="padding: 0 10px">
+ <el-select
+ v-model="queryParams.Comparator2"
+ placeholder="璇烽�夋嫨"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="(item, index) in comparatorList"
+ :key="index"
+ :label="item.label"
+ :value="item.value"
+ ></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="11">
+ <el-input
+ v-model="queryParams.ColContent2"
+ placeholder="璇疯緭鍏�"
+ clearable
+ @keyup.enter.native="handleQuery"
+ />
+ </el-col>
+ </el-row>
+ </el-form-item>
+ </div>
+ </el-card>
+ </el-collapse-item>
+ </el-collapse>
+ </el-form>
+ <div style="text-align:center;font-size:15px;font-weight:bold;color:#fc9393;margin: 20px 0;">
+ {{ currentFilterScheme }}
+ </div>
+ </el-card>
+ <el-row :gutter="10" class="mb8">
+ <el-col :span="1.5">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-upload2"
+ size="mini"
+ @click="handleImport"
+ >瀵煎叆</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-download"
+ size="mini"
+ @click="handleExport"
+ >瀵煎嚭</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-document"
+ size="mini"
+ @click="handleNumAdd"
+ >娴佹按鍙锋柊澧�</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="mini"
+ @click="handleAdd"
+ >鏂板</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-document-copy"
+ size="mini"
+ :disabled="single"
+ @click="handleCopy"
+ >澶嶅埗</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-edit"
+ size="mini"
+ :disabled="single"
+ @click="handleEdit"
+ >缂栬緫</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="danger"
+ plain
+ icon="el-icon-delete"
+ size="mini"
+ :disabled="single"
+ @click="handleDelete"
+ >鍒犻櫎</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-check"
+ size="mini"
+ :disabled="single"
+ @click="handleAudit(0)"
+ >瀹℃牳</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="success"
+ plain
+ icon="el-icon-close"
+ size="mini"
+ :disabled="single"
+ @click="handleAudit(1)"
+ >鍙嶅鏍�</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-turn-off"
+ size="mini"
+ :disabled="single"
+ @click="handleStop(0)"
+ >绂佺敤</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="warning"
+ plain
+ icon="el-icon-open"
+ size="mini"
+ :disabled="single"
+ @click="handleStop(1)"
+ >鍙嶇鐢�</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="info"
+ plain
+ icon="el-icon-setting"
+ size="mini"
+ @click="handleColumnSetting"
+ >鍒楄缃�</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="info"
+ plain
+ icon="el-icon-s-operation"
+ size="mini"
+ @click="handleButtonSetting"
+ >鎸夐挳璁剧疆</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-folder-checked"
+ size="mini"
+ @click="handleSaveScheme"
+ >淇濆瓨鏂规</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-folder-opened"
+ size="mini"
+ @click="handleReadScheme"
+ >璇诲彇鏂规</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="info"
+ plain
+ icon="el-icon-refresh"
+ size="mini"
+ @click="handleRefresh"
+ >鍒锋柊</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="info"
+ plain
+ icon="el-icon-close"
+ size="mini"
+ @click="handleExit"
+ >閫�鍑�</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-edit"
+ size="mini"
+ @click="handleCorrect"
+ >鎵规敼</el-button
+ >
+ </el-col>
+ <el-col :span="1.5">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-edit"
+ size="mini"
+ @click="handleCorrect2"
+ >鎵规敼(鏂规2)</el-button
+ >
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="10" style="margin-top: 10px">
+ <el-col :span="6">
+ <el-card style="height: 600px; overflow: hidden; display: flex; flex-direction: column;">
+ <div slot="header">
+ <span>鐗╂枡鍒嗙被</span>
+ </div>
+ <div style="flex: 1; overflow: auto; margin-bottom: 10px;">
+ <el-tree
+ :data="treeData"
+ :props="treeProps"
+ node-key="id"
+ default-expand-all
+ :expand-on-click-node="false"
+ @node-click="handleTreeNodeClick"
+ :highlight-current="true"
+ class="custom-tree"
+ >
+ <span class="custom-tree-node" slot-scope="{ node, data }">
+ <span>{{ node.label }}</span>
+ </span>
+ </el-tree>
+ </div>
+ <div style="height: 200px; border: 1px solid #ebeef5; border-radius: 4px;">
+ <el-carousel
+ :autoplay="false"
+ indicator-position="none"
+ height="200px"
+ ref="carousel"
+ >
+ <el-carousel-item v-for="(item, index) in fileList" :key="index">
+ <div v-if="item.type === 'image'" class="carousel-item">
+ <img
+ :src="item.url"
+ :alt="item.name"
+ style="width: 100%; height: 100%; object-fit: contain;"
+ @click="previewImg(item.url)"
+ />
+ </div>
+ <div v-else-if="item.type === 'pdf'" class="carousel-item">
+ <embed
+ :src="item.url"
+ type="application/pdf"
+ style="width: 100%; height: 100%;"
+ />
+ </div>
+ <div v-else class="carousel-item">
+ <h1 style="text-align:center;line-height:180px;color:red;font-weight:bolder;">
+ 鏆傛湭涓婁紶鏂囦欢
+ </h1>
+ </div>
+ </el-carousel-item>
+ </el-carousel>
+ </div>
+ </el-card>
+ </el-col>
+
+ <el-col :span="18">
+ <div class="tableBox" v-loading="loading">
+ <el-table
+ :data="tableData"
+ ref="tableData"
+ height="600"
+ @selection-change="handleSelectionChange"
+ border
+ @row-click="handleRowClick"
+ @row-dblclick="handleDblclick"
+ :row-style="rowStyle"
+ v-if="tableShow"
+ >
+ <el-table-column type="selection" width="55" align="center" fixed="left" />
+ <el-table-column prop="hmainid" label="鍗曟嵁ID" v-if="false" />
+ <el-table-column
+ v-for="(item, index) in btList"
+ :key="index"
+ :align="item.align"
+ :prop="item.field"
+ :label="item.title"
+ :width="item.width"
+ v-if="!item.hide"
+ :sortable="item.sort"
+ show-overflow-tooltip
+ :fixed="item.fixed"
+ >
+ <template slot-scope="{ row, column }">
+ <div :style="item.style">
+ <el-button
+ type="text"
+ @click="handleMaterialCodeClick(row)"
+ v-if="column.property === '鐗╂枡浠g爜'"
+ >{{ row[column.property] }}</el-button
+ >
+ <span v-else-if="(column.property || '').includes('鏃堕棿') || (column.property || '').includes('鏃ユ湡')">
+ {{ formatDate(row[column.property]) }}
+ </span>
+ <span v-else>{{ row[column.property] }}</span>
+ </div>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="page"
+ :limit.sync="pageSize"
+ :pageSizes="pageSizes"
+ @pagination="getList"
+ />
+ </div>
+ </el-col>
+ </el-row>
+
+ <el-dialog
+ :visible.sync="previewVisible"
+ width="80%"
+ top="5vh"
+ :before-close="handlePreviewClose"
+ >
+ <img :src="previewImage" style="width: 100%;" />
+ </el-dialog>
+
+ <el-dialog
+ title="闅愯棌鍒楄缃�"
+ :visible.sync="openColumnSetting"
+ width="816px"
+ append-to-body
+ >
+ <RowSettings
+ :colName="btResList"
+ :HModName="HModName"
+ @rowEditClose="columnSettingClose"
+ v-if="columnSettingShow"
+ />
+ </el-dialog>
+
+ <el-dialog
+ :title="editTitle"
+ :visible.sync="openEdit"
+ width="95%"
+ top="2vh"
+ append-to-body
+ class="material-edit-dialog"
+ :before-close="closeEdit"
+ >
+ <MaterialEdit
+ v-if="editShow"
+ :hID="currentEditId"
+ :OperationType="OperationType"
+ :HMaterTypeID="currentMaterTypeID"
+ @close="handleEditClose"
+ />
+ </el-dialog>
+
+ <MaterialCorrection
+ :visible.sync="openCorrect"
+ @close="closeCorrect"
+ />
+
+ <el-dialog
+ title="鎵规敼(鏂规2)"
+ :visible.sync="openCorrect2"
+ width="1480px"
+ append-to-body
+ :before-close="closeCorrect2"
+ >
+ <div style="text-align: center; padding: 50px;">
+ <h2>鐗╂枡鎵规敼鍔熻兘(鏂规2)</h2>
+ <p>鐗╂枡鎵规敼鍔熻兘(鏂规2)寰呭悗缁紑鍙�</p>
+ <el-button type="primary" @click="closeCorrect2">鍏抽棴</el-button>
+ </div>
+ </el-dialog>
+
+ <el-dialog
+ :title="upload.title"
+ :visible.sync="upload.open"
+ width="1500px"
+ append-to-body
+ >
+ <div style="margin-top: -20px">
+ <el-button type="primary" @click="handleImportSubmit">瀵煎叆鏁版嵁</el-button>
+ <el-button type="primary" @click="upload.open = false">閫� 鍑�</el-button>
+ <el-upload
+ ref="upload"
+ :limit="1"
+ accept=".xlsx, .xls"
+ style="display: inline-block; margin-left: 10px"
+ :action="upload.url + '?updateSupport=' + upload.updateSupport"
+ :disabled="upload.isUploading"
+ :on-progress="handleFileUploadProgress"
+ :on-success="handleFileSuccess"
+ >
+ <el-button type="primary">鏂囦欢涓婁紶</el-button>
+ </el-upload>
+ </div>
+ <el-table
+ :data="uploadData"
+ v-loading="uploadTableLoading"
+ border
+ height="550"
+ >
+ <el-table-column type="index" label="搴忓彿" width="55" align="center" />
+ <el-table-column label="鐗╂枡浠g爜" prop="鐗╂枡浠g爜" align="center" width="120" />
+ <el-table-column label="鐗╂枡鍚嶇О" prop="鐗╂枡鍚嶇О" align="center" width="120" />
+ <el-table-column label="鐗╂枡鍒嗙被" prop="鐗╂枡鍒嗙被" align="center" width="120" />
+ <el-table-column label="鎿嶄綔" align="center">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-delete"
+ @click="uploadDataDelete(scope.$index)"
+ >鍒犻櫎</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import axios from "axios";
+import RowSettings from "@/views/component/rowSettings";
+import MaterialEdit from "@/views/gyMaterial/edit";
+import MaterialCorrection from "@/views/gyMaterial/GyMaterialCorrection";
+
+export default {
+ name: "GyMaterial",
+ components: { RowSettings,MaterialEdit,MaterialCorrection },
+ props: {
+ openPage: { type: String },
+ },
+ data() {
+ return {
+ activeCollapse: [],
+
+ HModName: "Gy_Material",
+ HModuleName: "鐗╂枡鍒楄〃缁存姢",
+ HClassTag: "ForFilteringSchemes",
+ treeData: [],
+ treeProps: {
+ children: 'children',
+ label: 'title'
+ },
+ currentMaterTypeID: 0,
+
+ fileList: [
+ {
+ type: 'empty',
+ url: '',
+ name: '鏆傛棤鏂囦欢'
+ }
+ ],
+
+ // 缂栬緫鐩稿叧
+ editShow: false,
+ openEdit: false,
+ OperationType: null,
+ editTitle: "缂栬緫鐗╂枡",
+ currentEditId: 0,
+
+ // 鎵规敼鐩稿叧
+ openCorrect: false,
+ openCorrect2: false,
+
+ // 鍒楄缃�
+ columnSettingShow: false,
+ openColumnSetting: false,
+
+ // 鍥剧墖棰勮
+ previewVisible: false,
+ previewImage: '',
+
+ // 琛ㄦ牸鏄剧ず
+ tableShow: true,
+ loading: true,
+
+ queryParams: {
+ HNumber: null,
+ HName: null,
+ HNumber2: null,
+ HModel: null,
+ HOrgID: null,
+ HProject: null,
+ ColName: "0",
+ ColName1: "0",
+ ColName2: "0",
+ Comparator: "0",
+ Comparator1: "0",
+ Comparator2: "0",
+ ColContent: "",
+ ColContent1: "",
+ ColContent2: "",
+ },
+ organizationOptions: [],
+ projectOptions: [],
+ currentFilterScheme: "",
+ HInterID_Choose: 0,
+ comparatorList: [
+ { label: "=", value: "=" },
+ { label: ">=", value: ">=" },
+ { label: ">", value: ">" },
+ { label: "<=", value: "<=" },
+ { label: "<", value: "<" },
+ { label: "<>", value: "<>" },
+ { label: "鍖呭惈", value: "7" },
+ { label: "宸﹀寘鍚�", value: "8" },
+ { label: "鍙冲寘鍚�", value: "9" },
+ { label: "涓嶅寘鍚�", value: "10" },
+ ],
+
+ sWhere: "",
+ selectedRow: null,
+ ids: [],
+ single: true,
+ multiple: true,
+ tyResList: [],
+ btList: [],
+ btResList: [],
+ tableData: [],
+ pageSizes: [50, 100, 500, 5000, 50000],
+ page: 1,
+ pageSize: 50,
+ total: 0,
+ upload: {
+ open: false,
+ title: "瀵煎叆",
+ isUploading: false,
+ updateSupport: 0,
+ url: "http://47.96.97.237/API/Gy_Material/Gy_Material_Excel",
+ },
+ uploadData: [],
+ uploadTableLoading: false,
+
+ baseURL: process.env.VUE_APP_BASE_URL || "http://47.96.97.237/API/",
+ user: "admin",
+ };
+ },
+ computed: {
+ visibleColumns() {
+ return this.btList.filter(item => !item.hide && item.field);
+ }
+ },
+ created() {
+ this.fetchData();
+ },
+ methods: {
+ fetchData() {
+ axios
+ .get(
+ "http://47.96.97.237/API/Web/GetUser?UserName=001&PassWord=123456&HOrgName=100038"
+ )
+ .then((response) => {
+ let data = response.data.data[0];
+ this.user = data.Czymc;
+ this.getOrganizations();
+ this.getTreeData();
+ this.getProjectOptions();
+ this.getList();
+ this.getDefaultFilterScheme();
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ getOrganizations() {
+ axios
+ .get(this.baseURL + "/Web/GetOrganizations")
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.organizationOptions = response.data.data;
+ if (this.organizationOptions.length > 0) {
+ this.queryParams.HOrgID = this.organizationOptions[0].ID;
+ }
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ getTreeData() {
+ axios
+ .get(this.baseURL + "/Gy_MaterType/Gy_MaterTypeTreeListByLevel",{
+ params: {
+ HOrgID: '100038'
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.treeData = JSON.parse(response.data.data);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+
+ getProjectOptions() {
+ axios
+ .get(this.baseURL + "/Gy_Material/Get_HProject", {
+ params: {
+ HOrgID: this.queryParams.HOrgID
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.projectOptions = response.data.data;
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+
+ getList() {
+ this.tableShow = false;
+ this.loading = true;
+
+ axios
+ .get(this.baseURL + "/Gy_Material/page", {
+ params: {
+ sWhere: this.sWhere,
+ user: this.user,
+ page: this.page,
+ size: this.pageSize,
+ Organization: ''
+ },
+ })
+ .then((response) => {
+ let data1 = response.data;
+ if (data1.code == 1) {
+ this.tyResList = data1.data;
+ this.btResList = data1.data;
+ this.total = data1.count;
+ this.setDefaultColumns();
+ this.tableData = data1.data;
+ this.tableShow = true;
+ this.loading = false;
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ this.loading = false;
+ });
+ },
+
+
+ setDefaultColumns() {
+ this.btList = [
+ { type: 'checkbox', fixed: 'left' },
+ { field: 'hmainid', title: '鍗曟嵁ID', hide: true },
+ { field: '鐗╂枡浠g爜', title: '鐗╂枡浠g爜', align: 'center', width: 120 },
+ { field: '鐗╂枡鍚嶇О', title: '鐗╂枡鍚嶇О', align: 'center', width: 120 },
+ { field: '瑙勬牸鍨嬪彿', title: '瑙勬牸鍨嬪彿', align: 'center', width: 120 },
+ { field: '鐗╂枡灞炴��', title: '鐗╂枡灞炴��', align: 'center', width: 100 },
+ { field: '缁勭粐鍚嶇О', title: '缁勭粐鍚嶇О', align: 'center', width: 120 },
+ { field: '椤圭洰鍙�', title: '椤圭洰鍙�', align: 'center', width: 100 },
+ { field: '绂佺敤鏍囪', title: '绂佺敤鏍囪', align: 'center', width: 100 },
+ { field: '瀹℃牳浜�', title: '瀹℃牳浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓浜�', title: '鍒涘缓浜�', align: 'center', width: 100 },
+ { field: '鍒涘缓鏃堕棿', title: '鍒涘缓鏃堕棿', align: 'center', width: 150 }
+ ];
+ },
+
+
+ handleTreeNodeClick(data) {
+ this.currentMaterTypeID = data.id;
+
+ if (data.id == "100") {
+ this.sWhere = " and HMaterTypeID= 0";
+ } else if (data.id == "0") {
+ this.sWhere = "";
+ } else {
+ this.sWhere = " and HMaterTypeID='" + data.id + "' ";
+ }
+ this.getList();
+ },
+
+
+ async handleQuery() {
+ this.sWhere = "";
+
+
+ this.processFilterConditions();
+
+
+ if (this.queryParams.HNumber) {
+ this.sWhere += " and 鐗╂枡浠g爜 like '%" + this.queryParams.HNumber + "%'";
+ }
+ if (this.queryParams.HName) {
+ this.sWhere += " and 鐗╂枡鍚嶇О like '%" + this.queryParams.HName + "%'";
+ }
+ if (this.queryParams.HModel) {
+ this.sWhere += " and 瑙勬牸鍨嬪彿 like '%" + this.queryParams.HModel + "%'";
+ }
+ if (this.queryParams.HProject) {
+ this.sWhere += " and 椤圭洰鍙� like '%" + this.queryParams.HProject + "%'";
+ }
+
+ this.getList();
+ },
+
+ processFilterConditions() {
+ const conditions = [
+ { colName: this.queryParams.ColName, comparator: this.queryParams.Comparator, content: this.queryParams.ColContent },
+ { colName: this.queryParams.ColName1, comparator: this.queryParams.Comparator1, content: this.queryParams.ColContent1 },
+ { colName: this.queryParams.ColName2, comparator: this.queryParams.Comparator2, content: this.queryParams.ColContent2 }
+ ];
+
+ conditions.forEach(condition => {
+ if (condition.colName && condition.colName !== "0" && condition.comparator && condition.comparator !== "0") {
+ let com = "";
+ switch (condition.comparator) {
+ case "7":
+ com = "like'%" + condition.content + "%'";
+ break;
+ case "8":
+ com = "like'%" + condition.content + "'";
+ break;
+ case "9":
+ com = "like'" + condition.content + "%'";
+ break;
+ case "10":
+ com = "not like'%" + condition.content + "%'";
+ break;
+ default:
+ com = "" + condition.comparator + "'" + condition.content + "'";
+ break;
+ }
+ this.sWhere += " and " + condition.colName + " " + com;
+ }
+ });
+ },
+
+
+ resetQuery() {
+ this.sWhere = "";
+ this.queryParams = {
+ HNumber: null,
+ HName: null,
+ HNumber2: null,
+ HModel: null,
+ HOrgID: this.organizationOptions.length > 0 ? this.organizationOptions[0].ID : null,
+ HProject: null,
+ ColName: "0",
+ ColName1: "0",
+ ColName2: "0",
+ Comparator: "0",
+ Comparator1: "0",
+ Comparator2: "0",
+ ColContent: "",
+ ColContent1: "",
+ ColContent2: "",
+ };
+ this.getList();
+ },
+
+
+ handleResCnz() {
+ if (!this.queryParams.HNumber2) {
+ this.$modal.msgWarning("璇疯緭鍏ョ墿鏂欎唬鐮�");
+ return;
+ }
+
+ axios
+ .get(this.baseURL + "/Gy_Material/Gy_MaterialViewApi", {
+ params: {
+ Number: this.queryParams.HNumber2,
+ Type: 'WL'
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.$modal.msgSuccess(response.data.Message);
+ this.getList();
+ } else {
+ this.$modal.msgError(response.data.Message);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+
+ handleImport() {
+ this.uploadData = [];
+ this.upload.isUploading = false;
+ this.upload.title = "瀵煎叆";
+ this.upload.open = true;
+ },
+
+ handleExport() {
+ axios
+ .get(this.baseURL + "/LMES/getReportByModRightNameCheck", {
+ params: {
+ ModRightNameCheck: "Gy_Material_ExportExcel",
+ user: this.user
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ const ws = this.$XLSX.utils.json_to_sheet(this.tyResList);
+ const wb = this.$XLSX.utils.book_new();
+ this.$XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
+ this.$XLSX.writeFile(wb, `Gy_Material_${new Date().getTime()}.xlsx`);
+ } else {
+ this.$modal.msgError("褰撳墠妯″潡娌℃湁瀵煎嚭鏉冮檺!");
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ handleNumAdd() {
+ if ((this.currentMaterTypeID == 0 || this.currentMaterTypeID == null) && !this.judgeSkipTouchMaterType()) {
+ this.$modal.msgWarning("璇烽�夋嫨鍏蜂綋鐗╂枡鍒嗙被锛�");
+ return;
+ }
+ this.OperationType = 4;
+ this.currentEditId = 0;
+ this.editTitle = "娴佹按鍙锋柊澧炵墿鏂�";
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+ handleAdd() {
+ this.OperationType = 1;
+ this.currentEditId = 0;
+ this.editTitle = "鏂板鐗╂枡";
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+ handleCopy() {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+ this.OperationType = 2;
+ this.currentEditId = this.selectedRow.HItemID;
+ this.editTitle = "澶嶅埗鐗╂枡";
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+ handleEdit() {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+ this.OperationType = 3;
+ this.currentEditId = this.selectedRow.HItemID;
+ this.editTitle = "缂栬緫鐗╂枡";
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+ handleDelete() {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+
+ if (this.selectedRow.瀹℃牳浜� !== null && this.selectedRow.瀹℃牳浜� !== '') {
+ this.$modal.msgError("宸茶瀹℃牳鐨勭墿鏂欎笉鑳借鍒犻櫎!");
+ return;
+ }
+
+ this.$modal
+ .confirm("纭瑕佸垹闄ゅ悧锛屽垹闄ゅ悗涓嶈兘鎭㈠")
+ .then(() => {
+ axios
+ .get(this.baseURL + "/Gy_Material/Delete", {
+ params: {
+ HItemID: this.selectedRow.HItemID,
+ user: this.user
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.getList();
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ } else {
+ this.$modal.msgError("閿欒:" + response.data.code + response.data.Message);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ })
+ .catch(() => {});
+ },
+
+ handleAudit(isAudit) {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+
+ axios
+ .get(this.baseURL + "/Gy_Material/AuditGy_Material", {
+ params: {
+ HInterID: this.selectedRow.HItemID,
+ IsAudit: isAudit,
+ CurUserName: this.user
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.getList();
+ this.$modal.msgSuccess(response.data.Message);
+ } else {
+ this.$modal.msgError(response.data.Message);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ handleStop(isStop) {
+ if (this.single) {
+ this.$modal.msgWarning("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+ axios
+ .get(this.baseURL + "/Gy_Material/StopGy_Material", {
+ params: {
+ HInterID: this.selectedRow.HItemID,
+ IsStop: isStop,
+ CurUserName: this.user
+ }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.getList();
+ this.$modal.msgSuccess(response.data.Message);
+ } else {
+ this.$modal.msgError(response.data.Message);
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ handleColumnSetting() {
+ this.columnSettingShow = true;
+ this.openColumnSetting = true;
+ },
+
+ handleButtonSetting() {
+ this.$modal.msgInfo("鎸夐挳璁剧疆鍔熻兘");
+ },
+
+ handleSaveScheme() {
+ this.$modal.msgInfo("淇濆瓨鏂规鍔熻兘");
+ },
+
+ handleReadScheme() {
+ this.$modal.msgInfo("璇诲彇鏂规鍔熻兘");
+ },
+
+ handleRefresh() {
+ this.getList();
+ },
+
+ handleExit() {
+ this.$router.go(-1);
+ },
+
+ handleCorrect() {
+ this.openCorrect = true;
+ },
+
+ handleCorrect2() {
+ this.openCorrect2 = true;
+ },
+
+ // 鐗╂枡浠g爜鐐瑰嚮
+ handleMaterialCodeClick(row) {
+ this.selectedRow = row;
+ this.OperationType = 3;
+ this.currentEditId = row.HItemID;
+ this.editTitle = "缂栬緫鐗╂枡";
+ this.openEdit = true;
+ this.editShow = true;
+ },
+
+
+ handleRowClick(row, column, event) {
+ this.$refs.tableData.toggleRowSelection(row);
+ this.selectedRow = row;
+ this.getFileList(row.鐗╂枡浠g爜);
+ },
+
+
+ getFileList(HMaterNumber) {
+ if (!HMaterNumber) return;
+
+ axios
+ .get(this.baseURL + "/Cj_StationOutBill/Filelist", {
+ params: { HBillNo: HMaterNumber }
+ })
+ .then((response) => {
+ if (response.data.count == 1) {
+ this.fileList = [];
+ const data = response.data.data;
+
+ if (data.length === 0) {
+ this.fileList.push({
+ type: 'empty',
+ url: '',
+ name: '鏆傛棤鏂囦欢'
+ });
+ } else {
+ data.forEach(item => {
+ if (item.HFileType === '.jpeg' || item.HFileType === '.jpg') {
+ this.fileList.push({
+ type: 'image',
+ url: `../../..${item.HFilePath}`,
+ name: item.HFileName
+ });
+ } else if (item.HFileType === '.pdf') {
+ this.fileList.push({
+ type: 'pdf',
+ url: `../../..${item.HFilePath}`,
+ name: item.HFileName
+ });
+ }
+ });
+ }
+ }
+ })
+ .catch((error) => {
+ this.$modal.msgError("鑾峰彇鏂囦欢鍒楄〃澶辫触!");
+ });
+ },
+
+ // 鍥剧墖棰勮
+ previewImg(url) {
+ this.previewImage = url;
+ this.previewVisible = true;
+ },
+
+ handlePreviewClose() {
+ this.previewVisible = false;
+ this.previewImage = '';
+ },
+
+ // 琛屾牱寮�
+ rowStyle({ row, rowIndex }) {
+ if (this.ids.includes(row.hmainid)) {
+ return { background: "#ecf5ff" };
+ }
+ },
+
+ // 鍙屽嚮琛�
+ handleDblclick(row, column, cell, event) {
+ this.handleMaterialCodeClick(row);
+ },
+
+ handleSelectionChange(selection) {
+ this.ids = selection.map((item) => item.hmainid);
+ this.single = selection.length != 1;
+ this.multiple = !selection.length;
+ if (!this.single) {
+ this.selectedRow = selection[0];
+ }
+ },
+ // 缂栬緫鍏抽棴鍥炶皟
+ handleEditClose() {
+ this.openEdit = false;
+ this.editShow = false;
+ this.getList();
+ },
+ // 鍏抽棴缂栬緫
+ closeEdit() {
+ this.openEdit = false;
+ this.editShow = false;
+ },
+
+ // 鍏抽棴鎵规敼
+ closeCorrect() {
+ this.openCorrect = false;
+ },
+
+ // 鍏抽棴鎵规敼鏂规2
+ closeCorrect2() {
+ this.openCorrect2 = false;
+ },
+
+ // 鍒楄缃叧闂�
+ columnSettingClose(val) {
+ this.columnSettingShow = false;
+ this.openColumnSetting = val;
+ this.getList();
+ },
+
+ // 瀵煎叆鐩稿叧鏂规硶
+ handleFileUploadProgress(event, file, fileList) {
+ this.upload.isUploading = true;
+ this.uploadTableLoading = true;
+ },
+
+ handleFileSuccess(response, file, fileList) {
+ this.upload.isUploading = true;
+ this.$refs.upload.clearFiles();
+ if (response.code == 1) {
+ this.uploadData = response.data;
+ this.uploadTableLoading = false;
+ } else {
+ this.$alert(
+ "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+ response.Message +
+ "</div>",
+ "瀵煎叆缁撴灉",
+ { dangerouslyUseHTMLString: true }
+ );
+ }
+ },
+
+ handleImportSubmit() {
+ if (this.uploadData.length === 0) {
+ this.$modal.msgWarning("璇峰厛涓婁紶鏂囦欢");
+ return;
+ }
+
+ var sMainSub = JSON.stringify(this.uploadData) + "&鍜�" + this.user;
+ axios({
+ method: "post",
+ url: this.baseURL + "/Gy_Material/Gy_Material_btnSave",
+ data: {
+ sMainSub: sMainSub,
+ },
+ })
+ .then((res) => {
+ this.$alert(
+ "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+ res.data.Message +
+ "</div>",
+ "瀵煎叆缁撴灉",
+ { dangerouslyUseHTMLString: true }
+ );
+ this.upload.open = false;
+ this.getList();
+ })
+ .catch((error) => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ uploadDataDelete(index) {
+ this.uploadData.splice(index, 1);
+ },
+
+ formatDate(dateString) {
+ if (!dateString) return '';
+ const date = new Date(dateString);
+ return date.toLocaleString('zh-CN');
+ },
+
+ judgeSkipTouchMaterType() {
+ if (this.treeData.length > 0 && this.treeData[0].children &&
+ this.treeData[0].children.length == 1 &&
+ this.treeData[0].children[0].children.length == 0) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ getDefaultFilterScheme() {
+ this.currentFilterScheme = "褰撳墠杩囨护鏂规锛氶粯璁ゆ柟妗�";
+ }
+ },
+};
+</script>
+
+<style scoped>
+.searchText {
+ text-align: center;
+ margin-bottom: 30px;
+}
+
+.searchImg {
+ height: 60px;
+ background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 24 24"><path fill="%23a0a0a0" d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>') no-repeat center;
+ margin-top: 10px;
+}
+
+.custom-tree-node {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 14px;
+ padding-right: 8px;
+}
+
+.custom-tree {
+ height: 100%;
+ overflow-y: auto;
+}
+
+.carousel-item {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.materialBox .el-date-editor.el-input {
+ width: 100%;
+}
+
+.el-tree-node.is-current > .el-tree-node__content {
+ background-color: #aef0f7;
+}
+
+.box-card {
+ margin-top: 20px;
+}
+
+.filter-collapse {
+ margin-top: 10px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gyMaterial/GyMaterialCorrection.vue b/src/views/gyMaterial/GyMaterialCorrection.vue
new file mode 100644
index 0000000..2b20ba1
--- /dev/null
+++ b/src/views/gyMaterial/GyMaterialCorrection.vue
@@ -0,0 +1,913 @@
+<template>
+ <div class="material-correction">
+ <!-- 鎵规敼瀵硅瘽妗� -->
+ <el-dialog
+ title="鐗╂枡鎵规敼"
+ :visible.sync="openCorrect"
+ width="95%"
+ top="2vh"
+ append-to-body
+ class="material-correction-dialog"
+ :before-close="handleClose"
+ >
+ <div class="correction-container">
+ <!-- 鎼滅储鏉′欢鍖哄煙 -->
+ <el-card class="search-card">
+ <div slot="header" class="clearfix">
+ <span>鏌ヨ鏉′欢</span>
+ <el-button
+ style="float: right; padding: 3px 0"
+ type="text"
+ @click="toggleSearchMore"
+ >
+ {{ searchMore ? '鏀惰捣' : '鏇村' }}
+ </el-button>
+ </div>
+
+ <el-form :model="queryParams" ref="queryForm" label-width="80px">
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <el-form-item label="鐗╂枡浠g爜">
+ <el-input
+ v-model="queryParams.HNumber"
+ placeholder="璇疯緭鍏ョ墿鏂欎唬鐮�"
+ @keyup.enter.native="handleSearch"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="鐗╂枡鍚嶇О">
+ <el-input
+ v-model="queryParams.HName"
+ placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"
+ @keyup.enter.native="handleSearch"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="缁勭粐">
+ <el-select
+ v-model="queryParams.HOrgID"
+ placeholder="璇烽�夋嫨缁勭粐"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in organizationOptions"
+ :key="item.ID"
+ :label="item.Name"
+ :value="item.ID"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item>
+ <el-button type="primary" @click="handleSearch">鏌ヨ</el-button>
+ <el-button @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 鏇村鎼滅储鏉′欢 -->
+ <div v-show="searchMore">
+ <el-divider></el-divider>
+ <div class="filter-conditions">
+ <div class="filter-group" v-for="(filter, index) in filterConditions" :key="index">
+ <el-row :gutter="10">
+ <el-col :span="8">
+ <el-select
+ v-model="filter.colName"
+ placeholder="閫夋嫨鍒�"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option
+ v-for="col in visibleColumns"
+ :key="col.field"
+ :label="col.title"
+ :value="col.field"
+ />
+ </el-select>
+ </el-col>
+ <el-col :span="6">
+ <el-select
+ v-model="filter.comparator"
+ placeholder="姣旇緝绗�"
+ style="width: 100%"
+ >
+ <el-option value="0" label=""></el-option>
+ <el-option value="=" label="="></el-option>
+ <el-option value=">=" label=">="></el-option>
+ <el-option value=">" label=">"></el-option>
+ <el-option value="<=" label="<="></el-option>
+ <el-option value="<" label="<"></el-option>
+ <el-option value="<>" label="<>"></el-option>
+ <el-option value="7" label="鍖呭惈"></el-option>
+ <el-option value="8" label="宸﹀寘鍚�"></el-option>
+ <el-option value="9" label="鍙冲寘鍚�"></el-option>
+ <el-option value="10" label="涓嶅寘鍚�"></el-option>
+ </el-select>
+ </el-col>
+ <el-col :span="8">
+ <el-input
+ v-model="filter.colContent"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ @keyup.enter.native="handleSearch"
+ />
+ </el-col>
+ <el-col :span="2">
+ <el-button
+ type="danger"
+ icon="el-icon-delete"
+ circle
+ @click="removeFilter(index)"
+ v-if="filterConditions.length > 1"
+ ></el-button>
+ </el-col>
+ </el-row>
+ </div>
+
+ <el-button
+ type="primary"
+ icon="el-icon-plus"
+ @click="addFilter"
+ style="margin-top: 10px;"
+ >
+ 娣诲姞杩囨护鏉′欢
+ </el-button>
+ </div>
+ </div>
+ </el-form>
+ </el-card>
+
+ <!-- 涓昏鍐呭鍖哄煙 -->
+ <div class="main-content">
+ <!-- 宸︿晶涓昏〃鏍� -->
+ <div class="table-section left-table">
+ <div class="table-header">
+ <span>鐗╂枡鍒楄〃</span>
+ <div class="table-actions">
+ <el-button
+ type="danger"
+ icon="el-icon-delete"
+ size="mini"
+ @click="handleDelete"
+ :disabled="selectedRows.length === 0"
+ >
+ 鍒犻櫎
+ </el-button>
+ <el-button
+ type="success"
+ icon="el-icon-check"
+ size="mini"
+ @click="handleDataConfirm"
+ :disabled="selectedRows.length === 0"
+ >
+ 鏁版嵁纭
+ </el-button>
+ <el-button
+ type="info"
+ icon="el-icon-setting"
+ size="mini"
+ @click="handleColumnSetting"
+ >
+ 鍒楄缃�
+ </el-button>
+ </div>
+ </div>
+
+ <div class="table-container">
+ <el-table
+ ref="mainTable"
+ :data="tableData"
+ height="500"
+ @selection-change="handleSelectionChange"
+ border
+ v-loading="loading"
+ :row-class-name="getRowClassName"
+ >
+ <el-table-column type="selection" width="55" align="center"></el-table-column>
+ <el-table-column
+ v-for="column in mainTableColumns"
+ :key="column.field"
+ :prop="column.field"
+ :label="column.title"
+ :width="column.width"
+ :align="column.align || 'center'"
+ :show-overflow-tooltip="true"
+ >
+ <template slot-scope="{ row }">
+ <span v-if="isDateColumn(column.field)">
+ {{ formatDate(row[column.field]) }}
+ </span>
+ <span v-else>{{ row[column.field] }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <!-- 鍒嗛〉 -->
+ <div class="pagination-container">
+ <el-pagination
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="pagination.page"
+ :page-sizes="[50, 100, 500, 1000]"
+ :page-size="pagination.size"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="pagination.total"
+ >
+ </el-pagination>
+ </div>
+ </div>
+ </div>
+
+ <!-- 鍙充晶涓存椂琛ㄦ牸 -->
+ <div class="table-section right-table">
+ <div class="table-header">
+ <span>鎵规敼鏁版嵁</span>
+ <div class="table-actions">
+ <el-button
+ type="primary"
+ icon="el-icon-upload"
+ size="mini"
+ @click="handleSave"
+ :disabled="tempTableData.length === 0"
+ >
+ 淇濆瓨
+ </el-button>
+ <el-button
+ type="info"
+ icon="el-icon-close"
+ size="mini"
+ @click="handleExit"
+ >
+ 閫�鍑�
+ </el-button>
+ </div>
+ </div>
+
+ <div class="table-container">
+ <el-table
+ ref="tempTable"
+ :data="tempTableData"
+ height="500"
+ border
+ v-loading="tempLoading"
+ >
+ <el-table-column
+ v-for="column in tempTableColumns"
+ :key="column.field"
+ :prop="column.field"
+ :label="column.title"
+ :width="column.width"
+ :align="column.align || 'center'"
+ >
+ <template slot-scope="{ row, $index }">
+ <!-- 鍙紪杈戠殑鏂囨湰瀛楁 -->
+ <el-input
+ v-if="isEditableColumn(column.field) && !isSelectColumn(column.field)"
+ v-model="row[column.field]"
+ size="mini"
+ @change="handleCellEdit(row, column.field, $index)"
+ />
+
+ <!-- 涓嬫媺閫夋嫨妗� - 鐗╂枡灞炴�� -->
+ <el-select
+ v-else-if="column.field === '鐗╂枡灞炴��'"
+ v-model="row[column.field]"
+ size="mini"
+ style="width: 100%"
+ @change="handleSelectChange(column.field)"
+ >
+ <el-option value="澶栬喘" label="澶栬喘"></el-option>
+ <el-option value="鑷埗" label="鑷埗"></el-option>
+ <el-option value="濮斿" label="濮斿"></el-option>
+ </el-select>
+
+ <!-- 涓嬫媺閫夋嫨妗� - 浜嬩笟閮� -->
+ <el-select
+ v-else-if="column.field === '浜嬩笟閮�'"
+ v-model="row[column.field]"
+ size="mini"
+ style="width: 100%"
+ @change="handleSelectChange(column.field)"
+ >
+ <el-option value="娉ㄥ浜嬩笟閮�" label="娉ㄥ浜嬩笟閮�"></el-option>
+ <el-option value="杞浜嬩笟閮�" label="杞浜嬩笟閮�"></el-option>
+ <el-option value="鍏朵粬浜嬩笟閮�" label="鍏朵粬浜嬩笟閮�"></el-option>
+ </el-select>
+
+ <!-- 涓嶅彲缂栬緫瀛楁 -->
+ <span v-else>{{ row[column.field] }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </div>
+ </div>
+ </div>
+ </el-dialog>
+
+ <el-dialog
+ title="闅愯棌鍒楄缃�"
+ :visible.sync="openColumnSetting"
+ width="816px"
+ append-to-body
+ >
+ <RowSettings
+ :colName="btResList"
+ :HModName="HModName"
+ @rowEditClose="columnSettingClose"
+ v-if="columnSettingShow"
+ />
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import axios from 'axios'
+import RowSettings from '@/views/component/rowSettings'
+
+
+export default {
+ name: 'MaterialCorrection',
+ components: {
+ RowSettings
+ },
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data() {
+ return {
+ openCorrect: false,
+ searchMore: false,
+ loading: false,
+ tempLoading: false,
+ columnSettingVisible: false,
+
+ // 鏌ヨ鍙傛暟
+ queryParams: {
+ HNumber: '',
+ HName: '',
+ HOrgID: ''
+ },
+
+ // 杩囨护鏉′欢
+ filterConditions: [
+ { colName: '0', comparator: '0', colContent: '' }
+ ],
+
+ // 缁勭粐閫夐」
+ organizationOptions: [],
+
+ // 琛ㄦ牸鏁版嵁
+ tableData: [],
+ tempTableData: [],
+ selectedRows: [],
+
+ // 鍒嗛〉
+ pagination: {
+ page: 1,
+ size: 50,
+ total: 0
+ },
+
+ // 鍒楅厤缃�
+ allColumns: [],
+ mainTableColumns: [],
+ tempTableColumns: [],
+ // 鍒楄缃�
+ columnSettingShow: false,
+ openColumnSetting: false,
+ // 妯″潡鍚嶇О
+ HModName: 'Gy_Material_Correction',
+
+ baseURL: process.env.VUE_APP_BASE_URL || 'http://47.96.97.237/API/',
+ user: 'admin'
+ }
+ },
+ computed: {
+ visibleColumns() {
+ return this.allColumns.filter(col => !col.hide)
+ }
+ },
+ watch: {
+ visible: {
+ immediate: true,
+ handler(newVal) {
+ this.openCorrect = newVal
+ if (newVal) {
+ this.initData()
+ }
+ }
+ },
+ openCorrect(newVal) {
+ this.$emit('update:visible', newVal)
+ }
+ },
+ methods: {
+ // 鍒濆鍖栨暟鎹�
+ async initData() {
+ await this.getOrganizations()
+ await this.getTableData()
+ },
+
+ // 鑾峰彇缁勭粐鍒楄〃
+ async getOrganizations() {
+ try {
+ const response = await axios.get(`${this.baseURL}/Web/GetOrganizations`)
+ if (response.data.count === 1) {
+ this.organizationOptions = response.data.data
+ if (this.organizationOptions.length > 0) {
+ this.queryParams.HOrgID = this.organizationOptions[0].ID
+ }
+ }
+ } catch (error) {
+ this.$modal.msgError('鑾峰彇缁勭粐鍒楄〃澶辫触!')
+ }
+ },
+
+
+
+ // 璁剧疆榛樿鍒�
+ setDefaultColumns() {
+ this.allColumns = [
+ { field: 'HItemID', title: '鐗╂枡ID', hide: true },
+ { field: '鐗╂枡浠g爜', title: '鐗╂枡浠g爜', width: 120 },
+ { field: '鐗╂枡鍚嶇О', title: '鐗╂枡鍚嶇О', width: 150 },
+ { field: '瑙勬牸鍨嬪彿', title: '瑙勬牸鍨嬪彿', width: 120 },
+ { field: '鐗╂枡灞炴��', title: '鐗╂枡灞炴��', width: 100 },
+ { field: '浜嬩笟閮�', title: '浜嬩笟閮�', width: 120 },
+ { field: '缁勭粐鍚嶇О', title: '缁勭粐鍚嶇О', width: 120 },
+ { field: '榛樿浠撳簱', title: '榛樿浠撳簱', width: 120 },
+ { field: '璁¢噺鍗曚綅', title: '璁¢噺鍗曚綅', width: 100 },
+ { field: '鍩烘湰璁¢噺鍗曚綅', title: '鍩烘湰璁¢噺鍗曚綅', width: 120 },
+ { field: '鐗╂枡鍒嗙被', title: '鐗╂枡鍒嗙被', width: 120 },
+ { field: '鏁伴噺绮惧害', title: '鏁伴噺绮惧害', width: 100 },
+ { field: '鍗曚环绮惧害', title: '鍗曚环绮惧害', width: 100 },
+ { field: '閲戦绮惧害', title: '閲戦绮惧害', width: 100 },
+ { field: '榛樿绋庣巼', title: '榛樿绋庣巼', width: 100 },
+ { field: '榛樿鍒╂鼎鐜�', title: '榛樿鍒╂鼎鐜�', width: 100 },
+ { field: '鍏嬮噸', title: '鍏嬮噸', width: 100 },
+ { field: '骞呭', title: '骞呭', width: 100 },
+ { field: '鏌撹壊瑕佹眰', title: '鏌撹壊瑕佹眰', width: 120 },
+ { field: '澶囨敞', title: '澶囨敞', width: 150 },
+ { field: '瀹℃牳浜�', title: '瀹℃牳浜�', width: 100 },
+ { field: '鍒涘缓浜�', title: '鍒涘缓浜�', width: 100 },
+ { field: '鍒涘缓鏃堕棿', title: '鍒涘缓鏃堕棿', width: 150 }
+ ]
+
+ this.mainTableColumns = this.allColumns.filter(col => !col.hide)
+ this.tempTableColumns = this.mainTableColumns.map(col => ({
+ ...col,
+ editable: this.isEditableColumn(col.field)
+ }))
+ },
+
+ // 鑾峰彇琛ㄦ牸鏁版嵁
+ async getTableData() {
+ this.loading = true
+ try {
+ const sWhere = this.buildWhereCondition()
+
+ const response = await axios.get(`${this.baseURL}/Gy_Material/page`, {
+ params: {
+ sWhere: sWhere,
+ user: this.user,
+ page: this.pagination.page,
+ size: this.pagination.size,
+ Organization: ''
+ }
+ })
+
+ if (response.data.code === 1) {
+ this.tableData = response.data.data
+ this.pagination.total = response.data.count
+ } else {
+ this.$modal.msgError(response.data.Message)
+ }
+ } catch (error) {
+ this.$modal.msgError('鑾峰彇鏁版嵁澶辫触!')
+ } finally {
+ this.loading = false
+ }
+ },
+
+ // 鏋勫缓鏌ヨ鏉′欢
+ buildWhereCondition() {
+ let sWhere = ''
+
+ // 鍩烘湰鏌ヨ鏉′欢
+ if (this.queryParams.HNumber) {
+ sWhere += ` and 鐗╂枡浠g爜 like '%${this.queryParams.HNumber}%'`
+ }
+ if (this.queryParams.HName) {
+ sWhere += ` and 鐗╂枡鍚嶇О like '%${this.queryParams.HName}%'`
+ }
+ if (this.queryParams.HOrgID) {
+ sWhere += ` and HUSEORGID = '${this.queryParams.HOrgID}'`
+ }
+
+ // 杩囨护鏉′欢
+ this.filterConditions.forEach(filter => {
+ if (filter.colName && filter.colName !== '0' && filter.comparator && filter.comparator !== '0') {
+ let condition = ''
+ switch (filter.comparator) {
+ case '7': // 鍖呭惈
+ condition = `like '%${filter.colContent}%'`
+ break
+ case '8': // 宸﹀寘鍚�
+ condition = `like '%${filter.colContent}'`
+ break
+ case '9': // 鍙冲寘鍚�
+ condition = `like '${filter.colContent}%'`
+ break
+ case '10': // 涓嶅寘鍚�
+ condition = `not like '%${filter.colContent}%'`
+ break
+ default:
+ condition = `${filter.comparator} '${filter.colContent}'`
+ }
+ sWhere += ` and ${filter.colName} ${condition}`
+ }
+ })
+
+ return sWhere
+ },
+
+ // 鏌ヨ
+ handleSearch() {
+ this.pagination.page = 1
+ this.getTableData()
+ },
+
+ handleColumnSetting() {
+ this.columnSettingShow = true;
+ this.openColumnSetting = true;
+ },
+ // 鍒楄缃叧闂�
+ columnSettingClose(val) {
+ this.columnSettingShow = false;
+ this.openColumnSetting = val;
+ this.getList();
+ },
+
+ // 閲嶇疆鏌ヨ
+ resetQuery() {
+ this.queryParams = {
+ HNumber: '',
+ HName: '',
+ HOrgID: this.organizationOptions.length > 0 ? this.organizationOptions[0].ID : ''
+ }
+ this.filterConditions = [
+ { colName: '0', comparator: '0', colContent: '' }
+ ]
+ this.pagination.page = 1
+ this.getTableData()
+ },
+
+ // 娣诲姞杩囨护鏉′欢
+ addFilter() {
+ this.filterConditions.push({
+ colName: '0',
+ comparator: '0',
+ colContent: ''
+ })
+ },
+
+ // 鍒犻櫎杩囨护鏉′欢
+ removeFilter(index) {
+ this.filterConditions.splice(index, 1)
+ },
+
+ // 鍒囨崲鏇村鎼滅储鏉′欢
+ toggleSearchMore() {
+ this.searchMore = !this.searchMore
+ },
+
+ // 閫夋嫨琛屽彉鍖�
+ handleSelectionChange(selection) {
+ this.selectedRows = selection
+ },
+
+ // 鏁版嵁纭 - 灏嗛�変腑鐨勬暟鎹鍒跺埌涓存椂琛ㄦ牸
+ handleDataConfirm() {
+ if (this.selectedRows.length === 0) {
+ this.$modal.msgWarning('璇峰厛閫夋嫨瑕佹壒鏀圭殑鏁版嵁!')
+ return
+ }
+
+ // 娣辨嫹璐濋�変腑鐨勬暟鎹埌涓存椂琛ㄦ牸
+ this.tempTableData = JSON.parse(JSON.stringify(this.selectedRows))
+
+ // 閿佸畾涓昏〃鏍间腑宸查�変腑鐨勮锛堥�氳繃CSS绫诲悕锛�
+ this.$nextTick(() => {
+ this.$refs.mainTable.clearSelection()
+ })
+
+ this.$modal.msgSuccess(`宸茬‘璁� ${this.selectedRows.length} 鏉℃暟鎹紝璇峰湪鍙充晶琛ㄦ牸涓繘琛屾壒鏀筦)
+ },
+
+ // 淇濆瓨鎵规敼鏁版嵁
+ async handleSave() {
+ if (this.tempTableData.length === 0) {
+ this.$modal.msgWarning('娌℃湁闇�瑕佷繚瀛樼殑鏁版嵁!')
+ return
+ }
+
+ try {
+ this.tempLoading = true
+
+ // 杞崲鏁版嵁鏍煎紡
+ const saveData = this.tempTableData.map(item => ({
+ HOnceRightRate: item['涓�娆″悎鏍肩巼鏍囧噯鍊�'],
+ HDivisionID: this.divisionJudgment(item['浜嬩笟閮�']),
+ HNumber: item['鐗╂枡浠g爜'],
+ HName: item['鐗╂枡鍚嶇О'],
+ HModel: item['瑙勬牸鍨嬪彿'],
+ HMaterClsID: this.materClsJudgment(item['鐗╂枡灞炴��']),
+ HRemark: item['澶囨敞'],
+ HQtyDec: item['鏁伴噺绮惧害'],
+ HPriceDec: item['鍗曚环绮惧害'],
+ HMoneyDec: item['閲戦绮惧害'],
+ HTaxRate: item['榛樿绋庣巼'],
+ HProfitRate: item['榛樿鍒╂鼎鐜�'],
+ HTaxCost: item['鍚◣鎴愭湰浠�'],
+ HFootPrice: item['缁撶畻浠�'],
+ HWeight: item['鍏嬮噸'],
+ HColorRemark: item['鏌撹壊瑕佹眰'],
+ HWidth: item['骞呭'],
+ // 鍏朵粬闇�瑕佷繚瀛樼殑瀛楁...
+ HItemID: item.HItemID
+ }))
+
+ // 鏁版嵁楠岃瘉
+ for (const item of saveData) {
+ if (!item.HNumber) {
+ throw new Error('璇疯緭鍏ョ墿鏂欎唬鐮侊紒')
+ }
+ if (!item.HName) {
+ throw new Error('璇疯緭鍏ョ墿鏂欏悕绉帮紒')
+ }
+ // 鍏朵粬楠岃瘉瑙勫垯...
+ }
+
+ const dataStr = JSON.stringify(saveData)
+ const response = await axios.post(`${this.baseURL}/Gy_Material/SaveGy_MaterialList_Batch`, {
+ msg: dataStr + ';' + this.user + ';' + this.queryParams.HOrgID
+ })
+
+ if (response.data.count === 1) {
+ this.$modal.msgSuccess('淇濆瓨鎴愬姛!')
+ this.tempTableData = []
+ this.getTableData() // 鍒锋柊涓昏〃鏍�
+ } else {
+ this.$modal.msgError(response.data.Message)
+ }
+ } catch (error) {
+ this.$modal.msgError(error.message || '淇濆瓨澶辫触!')
+ } finally {
+ this.tempLoading = false
+ }
+ },
+
+ // 鍒犻櫎鏁版嵁
+ async handleDelete() {
+ if (this.selectedRows.length === 0) {
+ this.$modal.msgWarning('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁!')
+ return
+ }
+
+ try {
+ await this.$confirm('纭瑕佸垹闄ら�変腑鐨勬暟鎹悧锛�', '鎻愮ず', {
+ type: 'warning'
+ })
+ for (const row of this.selectedRows) {
+ await axios.get(`${this.baseURL}/Gy_Material/Delete`, {
+ params: {
+ HItemID: row.HItemID,
+ user: this.user
+ }
+ })
+ }
+
+ this.$modal.msgSuccess('鍒犻櫎鎴愬姛!')
+ this.getTableData()
+ this.selectedRows = []
+ } catch (error) {
+ if (error !== 'cancel') {
+ this.$modal.msgError('鍒犻櫎澶辫触!')
+ }
+ }
+ },
+
+ // 鍗曞厓鏍肩紪杈�
+ handleCellEdit(row, field, index) {
+ // 鍙互鍦ㄨ繖閲屾坊鍔犵紪杈戦獙璇侀�昏緫
+ console.log(`缂栬緫绗�${index + 1}琛岋紝瀛楁: ${field}, 鍊�: ${row[field]}`)
+ },
+
+ // 涓嬫媺閫夋嫨鍙樺寲
+ handleSelectChange(field) {
+ // 鎵归噺鏇存柊鐩稿悓瀛楁鐨勫��
+ this.tempTableData.forEach(item => {
+ // 杩欓噷鍙互鏍规嵁涓氬姟闇�姹傚喅瀹氭槸鍚﹀悓姝ユ洿鏂版墍鏈夎鐨勭浉鍚屽瓧娈�
+ })
+ },
+
+ // 鍒楄缃�
+ handleColumnSetting() {
+ this.columnSettingVisible = true
+ },
+
+ // 淇濆瓨鍒楄缃�
+ handleColumnSave(columns) {
+ this.allColumns = columns
+ this.mainTableColumns = this.allColumns.filter(col => !col.hide)
+ this.tempTableColumns = this.mainTableColumns.map(col => ({
+ ...col,
+ editable: this.isEditableColumn(col.field)
+ }))
+ this.columnSettingVisible = false
+ },
+
+
+
+ // 閫�鍑�
+ handleExit() {
+ if (this.tempTableData.length > 0) {
+ this.$confirm('鏈夋湭淇濆瓨鐨勬壒鏀规暟鎹紝纭畾瑕侀��鍑哄悧锛�', '鎻愮ず', {
+ type: 'warning'
+ }).then(() => {
+ this.handleClose()
+ })
+ } else {
+ this.handleClose()
+ }
+ },
+
+ // 鍏抽棴瀵硅瘽妗�
+ handleClose() {
+ this.openCorrect = false
+ this.$emit('close')
+ },
+
+ // 鍒嗛〉澶у皬鍙樺寲
+ handleSizeChange(size) {
+ this.pagination.size = size
+ this.pagination.page = 1
+ this.getTableData()
+ },
+
+ // 褰撳墠椤靛彉鍖�
+ handleCurrentChange(page) {
+ this.pagination.page = page
+ this.getTableData()
+ },
+
+ // 宸ュ叿鏂规硶
+ isEditableColumn(field) {
+ const nonEditableFields = [
+ 'HItemID', '鐗╂枡浠g爜', '鐗╂枡鍚嶇О', '缁勭粐鍚嶇О', '瀹℃牳浜�', '鍒涘缓浜�', '鍒涘缓鏃堕棿'
+ ]
+ return !nonEditableFields.includes(field)
+ },
+
+ isSelectColumn(field) {
+ return ['鐗╂枡灞炴��', '浜嬩笟閮�'].includes(field)
+ },
+
+ isDateColumn(field) {
+ return field.includes('鏃堕棿') || field.includes('鏃ユ湡')
+ },
+
+ formatDate(dateString) {
+ if (!dateString) return ''
+ const date = new Date(dateString)
+ return date.toLocaleString('zh-CN')
+ },
+
+ getRowClassName({ row }) {
+ return this.selectedRows.some(selected => selected.HItemID === row.HItemID) ? 'locked-row' : ''
+ },
+
+ divisionJudgment(divisionStr) {
+ switch (divisionStr) {
+ case '娉ㄥ浜嬩笟閮�': return 3
+ case '杞浜嬩笟閮�': return 4
+ default: return 0
+ }
+ },
+
+ materClsJudgment(materClsStr) {
+ switch (materClsStr) {
+ case '澶栬喘': return '1'
+ case '鑷埗': return '2'
+ case '濮斿': return '3'
+ default: return '0'
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+.material-correction-dialog ::v-deep .el-dialog__body {
+ padding: 10px 20px;
+}
+
+.correction-container {
+ height: 70vh;
+ display: flex;
+ flex-direction: column;
+}
+
+.search-card {
+ margin-bottom: 10px;
+}
+
+.main-content {
+ flex: 1;
+ display: flex;
+ gap: 10px;
+ min-height: 0;
+}
+
+.table-section {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ border: 1px solid #e6e6e6;
+ border-radius: 4px;
+ background: #fff;
+}
+
+.table-header {
+ padding: 8px 12px;
+ background: #f5f7fa;
+ border-bottom: 1px solid #e6e6e6;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.table-header span {
+ font-weight: bold;
+ color: #333;
+}
+
+.table-actions {
+ display: flex;
+ gap: 8px;
+}
+
+.table-container {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ min-height: 0;
+}
+
+.pagination-container {
+ padding: 10px;
+ background: #f5f7fa;
+ border-top: 1px solid #e6e6e6;
+}
+
+.filter-conditions {
+ margin-top: 10px;
+}
+
+.filter-group {
+ margin-bottom: 10px;
+}
+
+/* 閿佸畾琛岀殑鏍峰紡 */
+::v-deep .locked-row {
+ background-color: #f0f0f0 !important;
+ cursor: not-allowed;
+}
+
+::v-deep .locked-row .el-checkbox {
+ cursor: not-allowed;
+}
+
+::v-deep .locked-row .el-checkbox__input.is-disabled .el-checkbox__inner {
+ background-color: #f5f7fa;
+ border-color: #e4e7ed;
+ cursor: not-allowed;
+}
+
+/* 涓存椂琛ㄦ牸缂栬緫鏍峰紡 */
+::v-deep .temp-table .el-input__inner {
+ border: 1px solid #409eff;
+ border-radius: 4px;
+}
+
+::v-deep .temp-table .el-select {
+ width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/gyMaterial/edit/index.vue b/src/views/gyMaterial/edit/index.vue
new file mode 100644
index 0000000..70dc005
--- /dev/null
+++ b/src/views/gyMaterial/edit/index.vue
@@ -0,0 +1,1179 @@
+<template>
+ <div class="material-edit-container">
+ <div class="layui-fluid">
+ <div class="layui-row layui-col-space15">
+ <div class="layui-col-md12">
+ <div class="layui-card">
+ <el-form
+ id="form0"
+ class="layui-form"
+ :model="formData"
+ ref="materialForm"
+ label-width="85px"
+ >
+ <div class="layui-card-header">
+ <div class="layui-btn-group">
+ <el-button
+ type="primary"
+ class="layui-btn layui-btn-normal layui-btn-radius"
+ @click="handleCopy"
+ :disabled="!canCopy"
+ >
+ 澶嶅埗
+ </el-button>
+ <el-button
+ type="primary"
+ class="layui-btn layui-btn-normal layui-btn-radius"
+ @click="handleSave"
+ >
+ 淇濆瓨
+ </el-button>
+ <el-button
+ type="primary"
+ class="layui-btn layui-btn-normal layui-btn-radius"
+ @click="handleExit"
+ >
+ 閫�鍑�
+ </el-button>
+ </div>
+ </div>
+ <div class="layui-card-body">
+ <el-tabs v-model="activeTab" type="border-card">
+ <el-tab-pane label="鍩烘湰淇℃伅" name="basic">
+ <h1 style="text-align:center;"><b>鐗╂枡璁剧疆</b></h1>
+
+ <!-- 鍩烘湰淇℃伅琛ㄥ崟 -->
+ <div class="form-section">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡浠g爜*" prop="HNumber">
+ <el-input
+ v-model="formData.HNumber"
+ placeholder="璇疯緭鍏ョ墿鏂欎唬鐮�"
+ :readonly="operationType === 4"
+ ></el-input>
+ <input type="hidden" v-model="formData.HItemID" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡鍚嶇О*" prop="HName">
+ <el-input
+ v-model="formData.HName"
+ placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瑙勬牸鍨嬪彿*" prop="HModel">
+ <el-input
+ v-model="formData.HModel"
+ placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍔╄鐮�">
+ <el-input
+ v-model="formData.HHelpCode"
+ placeholder="璇疯緭鍏ュ姪璁扮爜"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍦嗘満浠g爜">
+ <el-input
+ v-model="formData.HCircularKnittingMachineCode"
+ placeholder="璇疯緭鍏ュ渾鏈轰唬鐮�"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="涓昏閲忓崟浣�*" prop="HUnitID">
+ <el-input
+ v-model="formData.HUnitName"
+ placeholder="璇烽�夋嫨涓昏閲忓崟浣�"
+ readonly
+ style="width: calc(100% - 50px); float: left;"
+ ></el-input>
+ <el-button
+ type="primary"
+ style="width: 40px;"
+ @click="openUnitDialog"
+ >
+ <i class="el-icon-search"></i>
+ </el-button>
+ <input type="hidden" v-model="formData.HUnitID" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍏嬮噸">
+ <el-input
+ v-model="formData.HWeight"
+ placeholder="璇疯緭鍏ユ暟瀛�"
+ type="number"
+ min="0"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="榛樿浠撳簱">
+ <el-input
+ v-model="formData.HWhName"
+ placeholder="璇烽�夋嫨榛樿浠撳簱"
+ readonly
+ style="width: calc(100% - 50px); float: left;"
+ ></el-input>
+ <el-button
+ type="primary"
+ style="width: 40px;"
+ @click="openWarehouseDialog"
+ >
+ <i class="el-icon-search"></i>
+ </el-button>
+ <input type="hidden" v-model="formData.HWhID" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鏌撹壊瑕佹眰">
+ <el-input
+ v-model="formData.HColorRemark"
+ placeholder="璇疯緭鍏ユ煋鑹茶姹�"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="棰滆壊">
+ <el-input
+ v-model="formData.HColor"
+ placeholder="璇疯緭鍏ラ鑹�"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="骞呭">
+ <el-input
+ v-model="formData.HWidth"
+ placeholder="璇疯緭鍏ユ暟瀛�"
+ type="number"
+ min="0"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡鍒嗙被">
+ <el-input
+ v-model="formData.HMaterClsName"
+ placeholder="璇烽�夋嫨鐗╂枡鍒嗙被"
+ readonly
+ style="width: calc(100% - 50px); float: left;"
+ ></el-input>
+ <el-button
+ type="primary"
+ style="width: 40px;"
+ @click="openMaterialTypeDialog"
+ >
+ <i class="el-icon-search"></i>
+ </el-button>
+ <input type="hidden" v-model="formData.HMaterTypeID" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡灞炴��">
+ <el-select v-model="formData.HMaterClsID" style="width: 100%;">
+ <el-option value="1" label="澶栬喘"></el-option>
+ <el-option value="2" label="鑷埗"></el-option>
+ <el-option value="3" label="濮斿"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 妫�楠屾柟妗堥儴鍒� -->
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="棣栦欢妫�楠屾柟妗�">
+ <el-input
+ v-model="formData.HQCSchemeName_Fst"
+ placeholder="璇烽�夋嫨棣栦欢妫�楠屾柟妗�"
+ readonly
+ style="width: calc(100% - 50px); float: left; background-color: #efefef4d;"
+ ></el-input>
+ <el-button
+ type="primary"
+ style="width: 40px;"
+ @click="openQCSchemeDialog('fst')"
+ >
+ <i class="el-icon-search"></i>
+ </el-button>
+ <input type="hidden" v-model="formData.HQCSchemeID_Fst" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="杞簭妫�楠屾柟妗�">
+ <el-input
+ v-model="formData.HQCSchemeName_Proc"
+ placeholder="璇烽�夋嫨杞簭妫�楠屾柟妗�"
+ readonly
+ style="width: calc(100% - 50px); float: left; background-color: #efefef4d;"
+ ></el-input>
+ <el-button
+ type="primary"
+ style="width: 40px;"
+ @click="openQCSchemeDialog('proc')"
+ >
+ <i class="el-icon-search"></i>
+ </el-button>
+ <input type="hidden" v-model="formData.HQCSchemeID_Proc" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="宸℃妫�楠屾柟妗�">
+ <el-input
+ v-model="formData.HQCSchemeName_Patrol"
+ placeholder="璇烽�夋嫨宸℃妫�楠屾柟妗�"
+ readonly
+ style="width: calc(100% - 50px); float: left; background-color: #efefef4d;"
+ ></el-input>
+ <el-button
+ type="primary"
+ style="width: 40px;"
+ @click="openQCSchemeDialog('patrol')"
+ >
+ <i class="el-icon-search"></i>
+ </el-button>
+ <input type="hidden" v-model="formData.HQCSchemeID_Patrol" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 鐗╂枡鍏紡閮ㄥ垎 -->
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡鍏紡">
+ <el-select v-model="formData.HMaterRuleType" style="width: 100%;">
+ <el-option value="鍏朵粬" label="鍏朵粬"></el-option>
+ <el-option value="鏌撴枡" label="鏌撴枡"></el-option>
+ <el-option value="鍔╁墏" label="鍔╁墏"></el-option>
+ <el-option value="鍔╁墏锛堟寜甯冪畻锛�" label="鍔╁墏锛堟寜甯冪畻锛�"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡鍏紡(缇婃瘺)" style="display: flex; flex-direction: row;">
+ <el-select v-model="formData.HMaterRuleExternType" style="width: 100%;">
+ <el-option value="鍏朵粬" label="鍏朵粬"></el-option>
+ <el-option value="鏌撴枡" label="鏌撴枡"></el-option>
+ <el-option value="鍔╁墏" label="鍔╁墏"></el-option>
+ <el-option value="鍔╁墏锛堟寜甯冪畻锛�" label="鍔╁墏锛堟寜甯冪畻锛�"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鐗╂枡鍏紡(姣涘皷)" style="display: flex; flex-direction: row;">
+ <el-select v-model="formData.HMaterRuleExternType1" style="width: 100%;">
+ <el-option value="鍏朵粬" label="鍏朵粬"></el-option>
+ <el-option value="鏌撴枡" label="鏌撴枡"></el-option>
+ <el-option value="鍔╁墏" label="鍔╁墏"></el-option>
+ <el-option value="鍔╁墏锛堟寜娴嗛噸绠楋級" label="鍔╁墏锛堟寜娴嗛噸绠楋級"></el-option>
+ <el-option value="杞墏" label="杞墏"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 棰滆壊鑹插彿鍜屽悎鏍肩巼 -->
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="棰滆壊鑹插彿">
+ <el-input
+ v-model="formData.HColorNo"
+ placeholder="璇烽�夋嫨棰滆壊"
+ readonly
+ style="width: 70%; float: left; background-color: #efefef4d;"
+ ></el-input>
+ <el-color-picker
+ v-model="formData.HColorNo"
+ style="width: 30%;"
+ ></el-color-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="涓�娆″悎鏍肩巼鏍囧噯鍊�">
+ <el-input
+ v-model="formData.HOnceRightRate"
+ placeholder="璇疯緭鍏ュ悎鏍肩巼"
+ type="number"
+ min="0"
+ max="100"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鐧藉澂瑕佹眰">
+ <el-input
+ type="textarea"
+ v-model="formData.HRemark"
+ placeholder="璇疯緭鍏ョ櫧鍧姹�"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="绂佺敤鏍囧織">
+ <el-checkbox
+ v-model="formData.HStopflag"
+ :disabled="true"
+ >鏄惁绂佺敤</el-checkbox>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ </el-tab-pane>
+
+ <el-tab-pane label="琛ュ厖淇℃伅" name="supplement">
+ <!-- 缇婃瘺淇℃伅 -->
+ <div class="form-section">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="姣涢珮">
+ <el-input v-model="formData.HHeight_M"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瀵告暟缁勭粐">
+ <el-input v-model="formData.HInches_M"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍏ㄦ瘺闀�">
+ <el-input v-model="formData.HAl1Long_M"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍧竷瀵嗗害">
+ <el-input v-model="formData.HDensity_M"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="姣涚罕鍚嶇О鍙婅鏍�">
+ <el-input v-model="formData.HTela_M"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="搴曚笣">
+ <el-input v-model="formData.HUnderTela_M"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="瀹氬瀷娴嗘枡">
+ <el-input v-model="formData.HSizing_M"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ </el-tab-pane>
+
+ <el-tab-pane label="鍏朵粬淇℃伅" name="other">
+ <!-- 鍏朵粬淇℃伅 -->
+ <div class="form-section">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="榛樿浠撲綅缁�">
+ <el-input v-model="formData.HSPGroupID" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="榛樿浠撲綅">
+ <el-input v-model="formData.HSPID" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="榛樿bom">
+ <el-input v-model="formData.HBomID" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鎹㈢畻鐜�">
+ <el-input v-model="formData.HSecUnitRate" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="榛樿鎵撳嵃妯℃澘">
+ <el-input v-model="formData.HBarCodePrintName"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 搴撳瓨鐩稿叧 -->
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鏈�楂樺簱瀛�">
+ <el-input v-model="formData.HHighStock" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鏈�浣庡簱瀛�">
+ <el-input v-model="formData.HLowStock" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瀹夊叏搴撳瓨">
+ <el-input v-model="formData.HSafeStock" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 浠锋牸鐩稿叧 -->
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="閲囪喘鍗曚环">
+ <el-input v-model="formData.HOrderPrice" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="閿�鍞崟浠�">
+ <el-input v-model="formData.HSalePrice" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璁″垝鍗曚环">
+ <el-input v-model="formData.HPlanPrice" type="number" min="0"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 鏇村瀛楁鍙互鏍规嵁闇�瑕佺户缁坊鍔� -->
+ </div>
+ </el-tab-pane>
+
+ <el-tab-pane label="鍒跺崟淇℃伅" name="order">
+ <!-- 鍒跺崟淇℃伅 -->
+ <div class="form-section">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍒跺崟浜�">
+ <el-input v-model="formData.HMakeEmp" readonly style="background-color:#efefef4d;"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瀹℃牳浜�">
+ <el-input v-model="formData.HCheckEmp" readonly style="background-color:#efefef4d;"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="绂佺敤浜�">
+ <el-input v-model="formData.HStopEmp" readonly style="background-color:#efefef4d;"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鍒跺崟鏃ユ湡">
+ <el-input v-model="formData.HMakeDate" readonly style="background-color:#efefef4d;"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="瀹℃牳鏃ユ湡">
+ <el-input v-model="formData.HCheckDate" readonly style="background-color:#efefef4d;"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="绂佺敤鏃ユ湡">
+ <el-input v-model="formData.HStopDate" readonly style="background-color:#efefef4d;"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ </el-tab-pane>
+
+ <el-tab-pane label="闄勪欢淇℃伅" name="attachment">
+ <!-- 闄勪欢淇℃伅 -->
+ <div class="form-section">
+ <el-upload
+ class="upload-demo"
+ action="#"
+ :on-preview="handlePreview"
+ :on-remove="handleRemove"
+ :before-remove="beforeRemove"
+ multiple
+ :limit="10"
+ :on-exceed="handleExceed"
+ :file-list="fileList"
+ >
+ <el-button size="small" type="primary">閫夋嫨鏂囦欢</el-button>
+ <div slot="tip" class="el-upload__tip">鍙兘涓婁紶jpg/png/pdf鏂囦欢锛屼笖涓嶈秴杩�500kb</div>
+ </el-upload>
+
+ <el-table :data="fileList" style="width: 100%">
+ <el-table-column prop="name" label="鏂囦欢鍚�"></el-table-column>
+ <el-table-column label="鍥剧墖">
+ <template slot-scope="scope">
+ <img
+ v-if="scope.row.type === 'image'"
+ :src="scope.row.url"
+ style="width: 150px; margin:10px;cursor:pointer;"
+ @click="previewImg(scope.row.url)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column prop="size" label="澶у皬"></el-table-column>
+ <el-table-column prop="status" label="鐘舵��"></el-table-column>
+ <el-table-column label="鎿嶄綔">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ @click="handleUpload(scope.$index, scope.row)"
+ >涓婁紶</el-button>
+ <el-button
+ size="mini"
+ type="danger"
+ @click="handleDelete(scope.$index, scope.row)"
+ >鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </el-form>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- 鍚勭寮圭獥缁勪欢 - 鏆傛椂鐣欑┖ -->
+ <el-dialog
+ title="閫夋嫨璁¢噺鍗曚綅"
+ :visible.sync="unitDialogVisible"
+ width="80%"
+ append-to-body
+ >
+ <!-- 璁¢噺鍗曚綅閫夋嫨缁勪欢棰勭暀浣嶇疆 -->
+ <div style="text-align: center; padding: 50px;">
+ <h2>璁¢噺鍗曚綅閫夋嫨鍔熻兘</h2>
+ <p>璁¢噺鍗曚綅閫夋嫨鍔熻兘寰呭悗缁紑鍙�</p>
+ <el-button type="primary" @click="unitDialogVisible = false">鍏抽棴</el-button>
+ </div>
+ </el-dialog>
+
+ <el-dialog
+ title="閫夋嫨浠撳簱"
+ :visible.sync="warehouseDialogVisible"
+ width="80%"
+ append-to-body
+ >
+ <!-- 浠撳簱閫夋嫨缁勪欢棰勭暀浣嶇疆 -->
+ <div style="text-align: center; padding: 50px;">
+ <h2>浠撳簱閫夋嫨鍔熻兘</h2>
+ <p>浠撳簱閫夋嫨鍔熻兘寰呭悗缁紑鍙�</p>
+ <el-button type="primary" @click="warehouseDialogVisible = false">鍏抽棴</el-button>
+ </div>
+ </el-dialog>
+
+ <el-dialog
+ title="閫夋嫨鐗╂枡鍒嗙被"
+ :visible.sync="materialTypeDialogVisible"
+ width="80%"
+ append-to-body
+ >
+ <!-- 鐗╂枡鍒嗙被閫夋嫨缁勪欢棰勭暀浣嶇疆 -->
+ <div style="text-align: center; padding: 50px;">
+ <h2>鐗╂枡鍒嗙被閫夋嫨鍔熻兘</h2>
+ <p>鐗╂枡鍒嗙被閫夋嫨鍔熻兘寰呭悗缁紑鍙�</p>
+ <el-button type="primary" @click="materialTypeDialogVisible = false">鍏抽棴</el-button>
+ </div>
+ </el-dialog>
+
+ <el-dialog
+ title="閫夋嫨妫�楠屾柟妗�"
+ :visible.sync="qcSchemeDialogVisible"
+ width="80%"
+ append-to-body
+ >
+ <!-- 妫�楠屾柟妗堥�夋嫨缁勪欢棰勭暀浣嶇疆 -->
+ <div style="text-align: center; padding: 50px;">
+ <h2>妫�楠屾柟妗堥�夋嫨鍔熻兘</h2>
+ <p>妫�楠屾柟妗堥�夋嫨鍔熻兘寰呭悗缁紑鍙�</p>
+ <el-button type="primary" @click="qcSchemeDialogVisible = false">鍏抽棴</el-button>
+ </div>
+ </el-dialog>
+
+ <!-- 鍥剧墖棰勮寮圭獥 -->
+ <el-dialog
+ :visible.sync="previewVisible"
+ width="80%"
+ top="5vh"
+ :before-close="handlePreviewClose"
+ >
+ <img :src="previewImage" style="width: 100%;" />
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import axios from "axios";
+
+export default {
+ name: "MaterialEdit",
+ props: {
+ hID: { type: [String, Number], default: 0 },
+ OperationType: { type: [String, Number], default: 1 }, // 1 鏂板 2澶嶅埗 3缂栬緫 4娴佹按鍙锋柊澧�
+ HMaterTypeID: { type: [String, Number], default: 0 }
+ },
+ data() {
+ return {
+ // 鏍囩椤垫縺娲荤姸鎬�
+ activeTab: 'basic',
+
+ // 琛ㄥ崟鏁版嵁
+ formData: {
+ HItemID: 0,
+ HNumber: '',
+ HName: '',
+ HModel: '',
+ HHelpCode: '',
+ HCircularKnittingMachineCode: '',
+ HUnitID: 0,
+ HUnitName: '',
+ HWeight: 0,
+ HWhID: 0,
+ HWhName: '',
+ HColorRemark: '',
+ HColor: '',
+ HWidth: 0,
+ HMaterTypeID: 0,
+ HMaterClsName: '',
+ HMaterClsID: '1',
+ HQCSchemeID_Fst: 0,
+ HQCSchemeName_Fst: '',
+ HQCSchemeID_Proc: 0,
+ HQCSchemeName_Proc: '',
+ HQCSchemeID_Patrol: 0,
+ HQCSchemeName_Patrol: '',
+ HMaterRuleType: '鍏朵粬',
+ HMaterRuleExternType: '鍏朵粬',
+ HMaterRuleExternType1: '鍏朵粬',
+ HColorNo: '',
+ HOnceRightRate: 0,
+ HRemark: '',
+ HStopflag: false,
+
+ // 琛ュ厖淇℃伅
+ HHeight_M: '',
+ HInches_M: '',
+ HAl1Long_M: '',
+ HDensity_M: '',
+ HTela_M: '',
+ HUnderTela_M: '',
+ HSizing_M: '',
+
+ // 鍏朵粬淇℃伅
+ HSPGroupID: 0,
+ HSPID: 0,
+ HBomID: 0,
+ HSecUnitRate: 0,
+ HBarCodePrintName: '',
+ HHighStock: 0,
+ HLowStock: 0,
+ HSafeStock: 0,
+ HOrderPrice: 0,
+ HSalePrice: 0,
+ HPlanPrice: 0,
+
+ // 鍒跺崟淇℃伅
+ HMakeEmp: '',
+ HMakeDate: '',
+ HCheckEmp: '',
+ HCheckDate: '',
+ HStopEmp: '',
+ HStopDate: ''
+ },
+
+ // 闄勪欢鍒楄〃
+ fileList: [],
+
+ // 寮圭獥鎺у埗
+ unitDialogVisible: false,
+ warehouseDialogVisible: false,
+ materialTypeDialogVisible: false,
+ qcSchemeDialogVisible: false,
+ previewVisible: false,
+ previewImage: '',
+
+ // 鍏朵粬鏁版嵁
+ canCopy: false,
+ qcSchemeType: 'fst', // fst, proc, patrol
+
+ baseURL: process.env.VUE_APP_BASE_URL || "http://47.96.97.237/API/",
+ user: "admin"
+ };
+ },
+ computed: {
+ operationType() {
+ return parseInt(this.OperationType);
+ },
+ materialTypeID() {
+ return parseInt(this.HMaterTypeID);
+ },
+ materialID() {
+ return parseInt(this.hID);
+ }
+ },
+ created() {
+ this.initData();
+ },
+ methods: {
+ // 鍒濆鍖栨暟鎹�
+ initData() {
+ // 璁剧疆褰撳墠鐢ㄦ埛鍜屾棩鏈�
+ this.formData.HMakeEmp = this.user;
+ this.formData.HMakeDate = this.formatDate(new Date());
+
+ // 鏍规嵁鎿嶄綔绫诲瀷鍒濆鍖�
+ if (this.materialID === 0 || this.materialID === null) {
+ // 鏂板
+ this.formData.HItemID = 0;
+ this.readConfigFile();
+ } else if (this.operationType === 2) {
+ // 澶嶅埗
+ this.loadMaterialData(this.materialID);
+ this.formData.HItemID = 0;
+ this.formData.HMakeEmp = this.user;
+ this.formData.HMakeDate = this.formatDate(new Date());
+ this.formData.HCheckEmp = '';
+ this.formData.HCheckDate = '';
+ this.formData.HStopEmp = '';
+ this.formData.HStopDate = '';
+ } else if (this.operationType === 3) {
+ // 缂栬緫
+ this.formData.HItemID = this.materialID;
+ this.loadMaterialData(this.materialID);
+ }
+
+ // 娴佹按鍙锋柊澧�
+ if (this.operationType === 4) {
+ this.getMaxNumber(this.materialTypeID);
+ }
+
+ // 鍒濆鍖栭檮浠�
+ this.initFileUpload();
+ },
+
+ // 璇诲彇閰嶇疆鏂囦欢
+ readConfigFile() {
+ // 浠庢湰鍦板瓨鍌ㄨ鍙栭厤缃�
+ const config = localStorage.getItem("Add_Edit_Gy_Material");
+ if (config) {
+ const configData = JSON.parse(config);
+ this.formData.HWhID = configData.HWhID || 0;
+ this.formData.HWhName = configData.HWhName || '';
+ this.formData.HMaterClsID = configData.HMaterClsID || '1';
+ this.formData.HUnitID = configData.HUnitID || 0;
+ this.formData.HUnitName = configData.HUnitName || '';
+ }
+ },
+
+ // 鍐欏叆閰嶇疆鏂囦欢
+ writeConfigFile() {
+ const configData = {
+ HWhID: this.formData.HWhID,
+ HWhName: this.formData.HWhName,
+ HMaterClsID: this.formData.HMaterClsID,
+ HUnitID: this.formData.HUnitID,
+ HUnitName: this.formData.HUnitName
+ };
+ localStorage.setItem("Add_Edit_Gy_Material", JSON.stringify(configData));
+ },
+
+ // 鍔犺浇鐗╂枡鏁版嵁
+ loadMaterialData(id) {
+ this.$modal.loading("鍔犺浇涓�...");
+ axios
+ .get(this.baseURL + "/Gy_Material/GetGy_MaterialDetail", {
+ params: { HID: id }
+ })
+ .then(response => {
+ this.$modal.closeLoading();
+ if (response.data.code === 1) {
+ const data = response.data.data.h_v_Edit_Gy_MaterialList[0];
+ this.populateFormData(data);
+
+ // 濡傛灉鏄鍒舵搷浣滐紝娓呯┖鐗╂枡浠g爜
+ if (this.operationType === 2) {
+ this.formData.HNumber = '';
+ }
+
+ // 鍔犺浇闄勪欢
+ this.loadFiles();
+ } else {
+ this.$modal.msgError(response.data.msg || "鍔犺浇鏁版嵁澶辫触");
+ }
+ })
+ .catch(error => {
+ this.$modal.closeLoading();
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ // 濉厖琛ㄥ崟鏁版嵁
+ populateFormData(data) {
+ // 鍩烘湰淇℃伅
+ this.formData.HNumber = data.鐗╂枡浠g爜 || '';
+ this.formData.HName = data.鐗╂枡鍚嶇О || '';
+ this.formData.HModel = data.瑙勬牸鍨嬪彿 || '';
+ this.formData.HHelpCode = data.鍔╄鐮� || '';
+ this.formData.HUnitID = data.涓昏閲忓崟浣� || 0;
+ this.formData.HUnitName = data.涓昏閲忓崟浣嶅悕绉� || '';
+ this.formData.HColor = data.棰滆壊 || '';
+ this.formData.HMaterTypeID = data.HMaterTypeID || 0;
+ this.formData.HMaterClsName = data.鐗╂枡鍒嗙被 || '';
+ this.formData.HMaterClsID = data.鐗╂枡灞炴�� === "0" ? "1" : (data.鐗╂枡灞炴�� || "1");
+ this.formData.HWhID = data.榛樿浠撳簱 || 0;
+ this.formData.HWhName = data.浠撳簱鍚嶇О || '';
+ this.formData.HWidth = data.HWidth || 0;
+ this.formData.HWeight = data.HWeight || 0;
+ this.formData.HColorRemark = data.鏌撹壊瑕佹眰 || '';
+ this.formData.HQCSchemeID_Fst = data.HQCSchemeID_Fst || 0;
+ this.formData.HQCSchemeName_Fst = data.棣栦欢妫�楠屾柟妗� || '';
+ this.formData.HQCSchemeID_Proc = data.HQCSchemeID_Proc || 0;
+ this.formData.HQCSchemeName_Proc = data.杞簭妫�楠屾柟妗� || '';
+ this.formData.HQCSchemeID_Patrol = data.HQCSchemeID_Patrol || 0;
+ this.formData.HQCSchemeName_Patrol = data.宸℃妫�楠屾柟妗� || '';
+ this.formData.HMaterRuleType = data.鐗╂枡鍏紡 || '鍏朵粬';
+ this.formData.HMaterRuleExternType = data.缇婃瘺鐗╂枡鍏紡 || '鍏朵粬';
+ this.formData.HMaterRuleExternType1 = data.姣涘皷鐗╂枡鍏紡 || '鍏朵粬';
+ this.formData.HColorNo = data.棰滆壊鑹插彿 || '';
+ this.formData.HOnceRightRate = data.涓�娆″悎鏍肩巼鏍囧噯鍊� || 0;
+ this.formData.HRemark = data.澶囨敞 || '';
+ this.formData.HStopflag = data.绂佺敤鏍囪 === "true";
+
+ // 琛ュ厖淇℃伅
+ this.formData.HHeight_M = data.姣涢珮 || '';
+ this.formData.HInches_M = data.瀵告暟缁勭粐 || '';
+ this.formData.HAl1Long_M = data.鍏ㄦ瘺闀� || '';
+ this.formData.HDensity_M = data.鍧忓竷瀵嗗害 || '';
+ this.formData.HTela_M = data.姣涚罕鍚嶇О鍙婅鏍� || '';
+ this.formData.HUnderTela_M = data.搴曚笣 || '';
+ this.formData.HSizing_M = data.瀹氬瀷娴嗘枡 || '';
+
+ // 鍏朵粬淇℃伅
+ this.formData.HBarCodePrintName = data.榛樿鎵撳嵃妯℃澘 || '';
+
+ // 鍒跺崟淇℃伅
+ this.formData.HMakeEmp = data.鍒涘缓浜� || '';
+ this.formData.HMakeDate = data.鍒涘缓鏃ユ湡 ? this.formatDate(new Date(data.鍒涘缓鏃ユ湡)) : '';
+ this.formData.HCheckEmp = data.瀹℃牳浜� || '';
+ this.formData.HCheckDate = data.瀹℃牳鏃ユ湡 ? this.formatDate(new Date(data.瀹℃牳鏃ユ湡)) : '';
+ this.formData.HStopEmp = data.绂佺敤浜� || '';
+ this.formData.HStopDate = data.绂佺敤鏃ユ湡 ? this.formatDate(new Date(data.绂佺敤鏃ユ湡)) : '';
+ },
+
+ // 鑾峰彇鏈�澶х紪鍙凤紙娴佹按鍙锋柊澧烇級
+ getMaxNumber(typeID) {
+ axios
+ .get(this.baseURL + "/Gy_Material/getMaxNum", {
+ params: {
+ HMaterTypeID: typeID,
+ user: this.user,
+ Organization: "default"
+ }
+ })
+ .then(response => {
+ if (response.data.data) {
+ this.formData.HNumber = response.data.data;
+ } else {
+ this.$modal.msgError(response.data.Message || "鑾峰彇缂栧彿澶辫触");
+ }
+ })
+ .catch(error => {
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ // 淇濆瓨鐗╂枡
+ handleSave() {
+ // 琛ㄥ崟楠岃瘉
+ if (!this.validateForm()) {
+ return;
+ }
+
+ this.$modal.loading("淇濆瓨涓�...");
+
+ // 鍑嗗鏁版嵁
+ const formData = { ...this.formData };
+
+ // 鍙戦�佽姹�
+ axios
+ .post(this.baseURL + "Gy_Material/SaveGy_MaterialList", {
+ msg: JSON.stringify(formData) + ';' + this.user + ';' + "default"
+ })
+ .then(response => {
+ this.$modal.closeLoading();
+ if (response.data.count === 1) {
+ this.$modal.msgSuccess(response.data.Message);
+ this.writeConfigFile();
+ // 淇濆瓨鎴愬姛鍚庣鐢ㄤ繚瀛樻寜閽�
+ this.canCopy = true;
+ } else {
+ this.$modal.msgError(response.data.Message);
+ }
+ })
+ .catch(error => {
+ this.$modal.closeLoading();
+ this.$modal.msgError("鎺ュ彛璇锋眰澶辫触!");
+ });
+ },
+
+ // 琛ㄥ崟楠岃瘉
+ validateForm() {
+ if (!this.formData.HNumber) {
+ this.$modal.msgWarning("璇疯緭鍏ョ墿鏂欎唬鐮侊紒");
+ return false;
+ }
+ if (!this.formData.HName) {
+ this.$modal.msgWarning("璇疯緭鍏ョ墿鏂欏悕绉帮紒");
+ return false;
+ }
+ if (!this.formData.HWhID) {
+ this.$modal.msgWarning("璇烽�夋嫨榛樿浠撳簱锛�");
+ return false;
+ }
+ if (!this.formData.HUnitID) {
+ this.$modal.msgWarning("璇烽�夋嫨涓昏閲忓崟浣嶏紒");
+ return false;
+ }
+
+ // 鏁板瓧瀛楁楠岃瘉
+ const numberFields = [
+ { field: 'HWeight', name: '鍏嬮噸' },
+ { field: 'HWidth', name: '骞呭' },
+ { field: 'HSecUnitRate', name: '鎹㈢畻鐜�' },
+ { field: 'HHighStock', name: '鏈�楂樺簱瀛�' },
+ { field: 'HLowStock', name: '鏈�浣庡簱瀛�' },
+ { field: 'HSafeStock', name: '瀹夊叏搴撳瓨' },
+ { field: 'HOrderPrice', name: '閲囪喘鍗曚环' },
+ { field: 'HSalePrice', name: '閿�鍞崟浠�' },
+ { field: 'HPlanPrice', name: '璁″垝鍗曚环' },
+ { field: 'HOnceRightRate', name: '涓�娆″悎鏍肩巼鏍囧噯鍊�' }
+ ];
+
+ for (const item of numberFields) {
+ if (this.formData[item.field] && !this.isValidNumber(this.formData[item.field])) {
+ this.$modal.msgWarning(`${item.name}璇疯緭鍏ユ纭殑鏁板瓧锛乣);
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ // 楠岃瘉鏁板瓧
+ isValidNumber(value) {
+ return /^[0-9]+\.?[0-9]*$/.test(value);
+ },
+
+ // 澶嶅埗
+ handleCopy() {
+ this.formData.HItemID = 0;
+ this.formData.HNumber = '';
+ this.canCopy = false;
+ this.$modal.msgSuccess("宸查噸缃〃鍗曪紝鍙互寮�濮嬪鍒舵搷浣�");
+ },
+
+ // 閫�鍑�
+ handleExit() {
+ this.$emit('close');
+ },
+
+ // 鎵撳紑璁¢噺鍗曚綅閫夋嫨寮圭獥
+ openUnitDialog() {
+ this.unitDialogVisible = true;
+ },
+
+ // 鎵撳紑浠撳簱閫夋嫨寮圭獥
+ openWarehouseDialog() {
+ this.warehouseDialogVisible = true;
+ },
+
+ // 鎵撳紑鐗╂枡鍒嗙被閫夋嫨寮圭獥
+ openMaterialTypeDialog() {
+ this.materialTypeDialogVisible = true;
+ },
+
+ // 鎵撳紑妫�楠屾柟妗堥�夋嫨寮圭獥
+ openQCSchemeDialog(type) {
+ this.qcSchemeType = type;
+ this.qcSchemeDialogVisible = true;
+ },
+
+ // 鍒濆鍖栨枃浠朵笂浼�
+ initFileUpload() {
+ // 鏂囦欢涓婁紶鍒濆鍖栭�昏緫
+ },
+
+ // 鍔犺浇鏂囦欢鍒楄〃
+ loadFiles() {
+ if (!this.formData.HNumber) return;
+
+ axios
+ .get(this.baseURL + "/Gy_Mater/Filelist", {
+ params: { HNumber: this.formData.HNumber }
+ })
+ .then(response => {
+ if (response.data.count === 1) {
+ this.fileList = response.data.data.map(item => ({
+ name: item.HFileName,
+ url: item.HFilePath,
+ size: (item.HFileSize / 1014).toFixed(1) + 'kb',
+ status: '涓婁紶鎴愬姛',
+ type: this.getFileType(item.HFileType)
+ }));
+ }
+ })
+ .catch(error => {
+ this.$modal.msgError("鑾峰彇鏂囦欢鍒楄〃澶辫触!");
+ });
+ },
+
+ // 鑾峰彇鏂囦欢绫诲瀷
+ getFileType(fileType) {
+ if (fileType === '.jpeg' || fileType === '.jpg' || fileType === '.png') {
+ return 'image';
+ } else if (fileType === '.pdf') {
+ return 'pdf';
+ }
+ return 'other';
+ },
+
+ // 鏂囦欢涓婁紶鐩稿叧鏂规硶
+ handleRemove(file, fileList) {
+ console.log(file, fileList);
+ },
+
+ handlePreview(file) {
+ console.log(file);
+ },
+
+ handleExceed(files, fileList) {
+ this.$modal.msgWarning(`褰撳墠闄愬埗閫夋嫨 10 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠讹紝鍏遍�夋嫨浜� ${files.length + fileList.length} 涓枃浠禶);
+ },
+
+ beforeRemove(file, fileList) {
+ return this.$confirm(`纭畾绉婚櫎 ${file.name}锛焋);
+ },
+
+ handleUpload(index, file) {
+ // 鏂囦欢涓婁紶閫昏緫
+ this.$modal.msgInfo("鏂囦欢涓婁紶鍔熻兘寰呭紑鍙�");
+ },
+
+ handleDelete(index, file) {
+ this.$confirm('纭瑕佸垹闄よ繖涓枃浠跺悧锛�', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.fileList.splice(index, 1);
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ });
+ },
+
+ // 鍥剧墖棰勮
+ previewImg(url) {
+ this.previewImage = url;
+ this.previewVisible = true;
+ },
+
+ handlePreviewClose() {
+ this.previewVisible = false;
+ this.previewImage = '';
+ },
+
+ // 宸ュ叿鏂规硶
+ formatDate(date) {
+ const year = date.getFullYear();
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
+ const day = date.getDate().toString().padStart(2, '0');
+ return `${year}-${month}-${day}`;
+ }
+ }
+};
+</script>
+
+<style scoped>
+.material-edit-container {
+ padding: 10px;
+}
+
+.layui-fluid {
+ width: 100%;
+}
+
+.layui-card {
+ margin-bottom: 15px;
+ border-radius: 2px;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+}
+
+.layui-card-header {
+ padding: 10px 15px;
+ border-bottom: 1px solid #f6f6f6;
+ background-color: #f8f8f8;
+}
+
+.layui-card-body {
+ padding: 15px;
+}
+
+.layui-btn-group {
+ margin-bottom: 0;
+}
+
+.form-section {
+ margin-top: 20px;
+}
+
+.el-form-item {
+ margin-bottom: 18px;
+}
+
+.el-row {
+ margin-bottom: 10px;
+}
+
+.upload-demo {
+ margin-bottom: 20px;
+}
+
+/* 鍝嶅簲寮忚皟鏁� */
+@media (max-width: 768px) {
+ .el-col {
+ margin-bottom: 15px;
+ }
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.1