diff --git a/components.d.ts b/components.d.ts
index 9368a18..f0ddcc2 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -33,6 +33,8 @@ declare module '@vue/runtime-core' {
     LayLogo: typeof import('@layui/layui-vue')['LayLogo']
     LayMenu: typeof import('@layui/layui-vue')['LayMenu']
     LayMenuItem: typeof import('@layui/layui-vue')['LayMenuItem']
+    LayProgress: typeof import('@layui/layui-vue')['LayProgress']
+    LayQuote: typeof import('@layui/layui-vue')['LayQuote']
     LayRadio: typeof import('@layui/layui-vue')['LayRadio']
     LayRow: typeof import('@layui/layui-vue')['LayRow']
     LayScroll: typeof import('@layui/layui-vue')['LayScroll']
@@ -44,6 +46,9 @@ declare module '@vue/runtime-core' {
     LayTab: typeof import('@layui/layui-vue')['LayTab']
     LayTabItem: typeof import('@layui/layui-vue')['LayTabItem']
     LayTable: typeof import('@layui/layui-vue')['LayTable']
+    LayTextarea: typeof import('@layui/layui-vue')['LayTextarea']
+    LayTooltip: typeof import('@layui/layui-vue')['LayTooltip']
+    LayUpload: typeof import('@layui/layui-vue')['LayUpload']
     LightIcon: typeof import('./src/components/LightIcon.vue')['default']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']
diff --git a/src/api/api/user.ts b/src/api/api/user.ts
index f5fac7c..1000018 100644
--- a/src/api/api/user.ts
+++ b/src/api/api/user.ts
@@ -131,4 +131,20 @@ export async function GetPowerList() {
 	return result;
 }
 
+export async function GetFreezingColumns() {
+	let result="";
+	await http.post('/api/User/GetFreezingColumns').then((data)=>{
+		result=data.Data;
+	})
+	return result;
+}
+
+export async function EditFreezingColumns(freezingColumns) {
+	let result="";
+	await http.post('/api/User/EditFreezingColumns?freezingColumns='+freezingColumns, {}).then((data)=>{
+		result=data.Data;
+	})
+	return result;
+}
+
 
diff --git a/src/views/Need/all.vue b/src/views/Need/all.vue
index 64cdb57..e18ebb7 100644
--- a/src/views/Need/all.vue
+++ b/src/views/Need/all.vue
@@ -72,9 +72,6 @@
 		
 			
 		
-		
-			
-		
 		
 			
 		
@@ -95,7 +92,6 @@
 	import AddTerm from '../Team/components/AddTerm.vue';
 	import BOMDownload from "./components/BOMDownload.vue";
 	import EditView from "./components/EditView.vue";
-	import EditType from "./components/EditType.vue";
 	import AddPackage from "./components/AddPackage.vue";
 	import SureView from "./components/SureView.vue";
 	import EditGroup from "./components/EditGroup.vue";
@@ -111,7 +107,6 @@
 			AddTerm,
 			BOMDownload,
 			EditView,
-			EditType,
 			AddPackage,
 			SureView,
 			EditGroup,
@@ -345,8 +340,8 @@
 				} else if (data.FType == 14) {
 					data.FBoxType = 8; //补充包材规格
 				} else if (data.FType == 15) {
-					data.FBoxType = 9; //物料选择类型
-				}else if(data.FType==16){
+					data.FBoxType = 3; //物料选择类型
+				} else if(data.FType==16){
 					this.dataItem=data;
 					data.FBoxType = 10; //替代料确认
 				}else {
diff --git a/src/views/Need/components/EditType.vue b/src/views/Need/components/EditType.vue
deleted file mode 100644
index cd79521..0000000
--- a/src/views/Need/components/EditType.vue
+++ /dev/null
@@ -1,390 +0,0 @@
-
-	
-		
-			
-				保存
-				
-				
-				
-					半成品编号:
-				
-				
-					描述:
-				
-			
-			
-				
-					
-				
-				
-					
-				
-				
-					
-				
-				
-			
-		
-		
-		
-		
-		
-	
-
-
-
-
diff --git a/src/views/Need/components/EditView.vue b/src/views/Need/components/EditView.vue
index 1fad505..04fb0ac 100644
--- a/src/views/Need/components/EditView.vue
+++ b/src/views/Need/components/EditView.vue
@@ -97,7 +97,8 @@ import {
 	updateBatchById2
 } from "/src/api/api/view";
 import {
-	getBasicRoleList
+	getBasicRoleList,
+	GetFreezingColumns
 } from "/src/api/api/user";
 import {
 	getDataCode,
@@ -186,7 +187,7 @@ export default {
 		async getUserPower() {
 			if (this.dataInfoObj.FCanEdit != 2) {
 				this.userPower[0] = (await getBasicRoleList({
-					FRoleType: 40,
+					FRoleType: 84,
 					FViewType: this.dataInfoObj.FViewType
 				}) || []).map(it => parseInt(it.F2))
 				this.userPower[1] = (await getBasicRoleList({
@@ -201,7 +202,8 @@ export default {
 				teamId: this.dataInfoObj.FTeamID,
 				viewType: this.dataInfoObj.FViewType
 			});
-			if (this.dataInfoObj.FViewType == 1) {
+			console.log('_data', _data);
+			if (this.dataInfoObj.FViewType == 1 || this.dataInfoObj.FViewType == 10) {
 				this.inputCodeValue = _data.rows[0].HalfCode;
 				this.inputDescValue = _data.rows[0].HalfDesc;
 				this.isShow = true;
@@ -212,8 +214,8 @@ export default {
 			this.typeList[0] = _data.types.filter(s => s.FDepth == 1) || [];
 			this.typeList[1] = _data.types.filter(s => s.FDepth != 1) || [];
 			let dataColumn = _data.columns || [];
+			
 			let editColumn = dataColumn.filter(it => {
-
 				let b = false;
 				if (this.dataInfoObj.FCanEdit != 2) {
 					if (it.fieldType == 7) b = this.userPower[1].indexOf(it.id) >= 0;
@@ -225,6 +227,7 @@ export default {
 				}
 				return b;
 			});
+
 			if (editColumn.length > 0) {
 				if (this.selectDataMap == null) {
 					let dataTypeIds = editColumn.filter(it => {
@@ -249,7 +252,6 @@ export default {
 			}
 			let columnsList = [];
 			let col7 = dataColumn.filter(s => s.fieldType == 7) || [];
-			debugger
 
 			_data.rows.forEach((item, i) => {
 
@@ -295,18 +297,35 @@ export default {
 			let saveId = this.dataInfoObj.FViewType + "_" + this.dataInfoObj.FID;
 			localStorage.setItem('EditView' + saveId, JSON.stringify(_data.rows));
 
-
-
+			console.log('editColumn', editColumn);
 			this.editColumn = editColumn;
 			this.dataList = _data.rows;
 			this.dataColumn = dataColumn;
 			this.originalColumns = this.deepCopy(dataColumn);
-			debugger
+			this.getFreezingColumns();
 
 			setTimeout(function () {
 				layer.close(idx);
 			}, 500);
 		},
+		async getFreezingColumns() {
+			let result = await GetFreezingColumns();			
+			let freezingColumns = result.FFreezingColumns
+
+			if (freezingColumns) {
+				let c_list = freezingColumns.split(",")
+				c_list.forEach(c => {
+					if(c && c.length > 0) {
+						this.freezingColumnSetting.push(c)
+					}
+				})
+			}
+
+			if (this.freezingColumnSetting && this.freezingColumnSetting.length > 0) {
+				this.dataColumn = ref([]);
+				this.setFreezingColumns();
+			}
+		},
 		cancelClick(isRefresh) {
 			isRefresh = isRefresh == undefined ? false : isRefresh;
 			this.$emit('cancelClick', isRefresh);
@@ -323,14 +342,38 @@ export default {
 
 					if (result != null && result.FID) {
 						let col7 = this.dataColumn.filter(s => s.fieldType == 7) || [];
+						console.log('this.typeList[0]', this.typeList[0].filter(t => t.FValue == data.FTypeID1)[0]);
 						col7.forEach((item) => {
 							if (item.table == "TFS_MaterialInfo") {
 								data[item.key] = result[item.key] || data[item.key] || "";
 							}
 						});
+						console.log('data.FTypeID1', data.FTypeID1);
+
+						let type1 = this.typeList[0].filter(t => t.FValue == data.FTypeID1)[0];
+						let typeName = type1.FName;
+
+						if (typeName.indexOf("半成品") > 0) {
+							data.FViewType = 2
+						}
+
+						if (typeName.indexOf("中间品") > 0) {
+							data.FViewType = 3
+						}
+
+						if (typeName.indexOf("香基") > 0) {
+							data.FViewType = 4
+						}
+
+						if (typeName.indexOf("原料类") > 0) {
+							data.FViewType = 5
+						}
+
+						if (typeName.indexOf("成品") > 0) {
+							data.FViewType = 1
+						}
 
 						this.dataColumn.map(function (item) {
-							debugger
 							let str = result[item.key + "Type"];
 
 							if (typeof (str) != "undefined") {
@@ -373,12 +416,26 @@ export default {
 			};
 			let saveId = this.dataInfoObj.FViewType + "_" + this.dataInfoObj.FID;
 			let cacheDataList = JSON.parse(localStorage.getItem('EditView' + saveId));
+			console.log('cacheDataList', cacheDataList);
 			this.dataList.forEach((row, index) => {
 				let cache = cacheDataList[index];
 				let dataObj = {};
+				console.log('this.editColumn', this.editColumn);
 				for (let col of this.editColumn) {
 					let valTemp = row[col.key];
-					if (valTemp != cache[col.key]) {
+					if (this.dataInfoObj.FViewType == 10) {
+						if (!dataObj[col.table]) {
+							dataObj[col.table] = {};
+							dataObj[col.table].FMaterialID = row["FMaterialID"];
+						}
+						dataObj[col.table][col.key] = valTemp;
+						if (col.key == "FTypeID1" || col.key == "FTypeID2") {
+							let temps = this.typeList[col.key == "FTypeID1" ? 0 : 1] || [];
+							let temp = temps.find(s => s.FID == valTemp) || null;
+							valTemp = temp == null ? "" : temp.FName;
+						}
+						updateObj.LogList.push(col.title + ":" + (valTemp == "" ? "删除" : valTemp));
+					} else if (valTemp != cache[col.key]) {
 						if (!dataObj[col.table]) {
 							dataObj[col.table] = {};
 							dataObj[col.table].FMaterialID = row["FMaterialID"];
@@ -392,6 +449,9 @@ export default {
 						updateObj.LogList.push(col.title + ":" + (valTemp == "" ? "删除" : valTemp));
 					}
 				}
+
+				console.log('dataObj', dataObj);
+
 				for (let key in dataObj) {
 					if (!updateObj[key]) updateObj[key] = [];
 					updateObj[key].push(dataObj[key]);
@@ -401,6 +461,8 @@ export default {
 			if (updateLog != "") {
 				delete updateObj.LogList
 				// 发送保存请求
+				debugger
+				console.log('updateObj', updateObj);
 				let _result = await updateBatchById2(updateObj);
 				if (_result.Code === 200) {
 					await commonSave({
@@ -443,9 +505,11 @@ export default {
 				})
 
 				this.dataColumn = freezingColumns.concat(this.tmpDataColumn);
+				
 			} else {
-				this.dataColumn = this.tmpDataColumn;
+				this.dataColumn = this.tmpDataColumn;			
 			}
+			this.$nextTick();
 		},
 		setFreezingColumnsSetting(fcs) {
 			this.freezingColumnSetting = fcs;
diff --git a/src/views/Need/components/FreezingColumnSetting.vue b/src/views/Need/components/FreezingColumnSetting.vue
index aa9b050..13b00c7 100644
--- a/src/views/Need/components/FreezingColumnSetting.vue
+++ b/src/views/Need/components/FreezingColumnSetting.vue
@@ -21,6 +21,9 @@
     import {
 		ref
 	} from 'vue';
+    import {
+        EditFreezingColumns
+    } from "/src/api/api/user";
     export default {
         setup() {
             const columnList = ref([]);
@@ -53,7 +56,20 @@
                 this.$emit('cancelClick', this.freezingColumns);
             },
             submitClick() {
+                this.editFreezingColumns();
                 this.$emit('cancelClick', this.checkedItem);
+            },
+            async editFreezingColumns() {
+                var checkedItemsStr = "";
+                if (this.checkedItem && this.checkedItem.length > 0) {
+                    this.checkedItem.forEach((item) => {
+                        checkedItemsStr = checkedItemsStr + "," + item;
+                    })
+                }
+
+                if (checkedItemsStr) {
+                    let result = await EditFreezingColumns(checkedItemsStr);
+                }
             }
         }
     }
diff --git a/src/views/Order/components/ShowMaterial.vue b/src/views/Order/components/ShowMaterial.vue
index e157e2c..209f4ed 100644
--- a/src/views/Order/components/ShowMaterial.vue
+++ b/src/views/Order/components/ShowMaterial.vue
@@ -139,7 +139,7 @@ export default {
 					});
 				}
 			});
-			debugger
+
 			this.dataColumn = dataColumn;
 			let result2 = await getPageList({
 				FPageSize: 99,
@@ -155,7 +155,7 @@ export default {
 			this.dataList = result2.Data.List.map(function(item){
                  item["FTypeName1"]=materialType.Data.List.find(m=>m.FID==item.FTypeID1)?materialType.Data.List.find(m=>m.FID==item.FTypeID1).FName:"";
 				 item["FTypeName2"]=materialType.Data.List.find(m=>m.FID==item.FTypeID2)?materialType.Data.List.find(m=>m.FID==item.FTypeID2).FName:"";
-				 debugger
+
 				 item.FType=materialType.Data.List.find(m=>m.FID==item.FType)?materialType.Data.List.find(m=>m.FID==item.FType).FName:"";
 				 item["FSAPCode"]=item.FCode;
 				 item["FSAPDescription"]=item.FName;
diff --git a/src/views/System/role.vue b/src/views/System/role.vue
index 6d6d87e..cdce1ba 100644
--- a/src/views/System/role.vue
+++ b/src/views/System/role.vue
@@ -62,7 +62,7 @@
 		deleteRoleModel
 	} from "/src/api/api/user";
 	import EditRole from './components/EditRole.vue';
-	import PowerRole from './components/PowerRole2.vue';
+	import PowerRole from './components/PowerRole.vue';
 	import '@layui/layui-vue/es/checkbox/index.css';
 	export default {
 		components: {