Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82adb510be | ||
|
|
09098efd34 | ||
|
|
a24d032541 | ||
|
|
fcaf41994d | ||
|
|
65cbb347e1 |
No files matched your search
@@ -31,7 +31,7 @@ namespace AllBase
|
||||
/// <summary>
|
||||
/// 版本ID
|
||||
/// </summary>
|
||||
public static int VersionCount = 1373;
|
||||
public static int VersionCount = 1376;
|
||||
public static string MainPath = "29wx";
|
||||
//public static string MainPath = "29wx";
|
||||
//public static string MainPath = "29pdd";
|
||||
|
||||
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 21 KiB |
@@ -0,0 +1 @@
|
||||
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 truncated
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1 @@
|
||||
丁墨创投MThd丁墨创投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 truncated
|
||||
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1 @@
|
||||
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 truncated
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1 @@
|
||||
云享供应链MThd云享供应链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 truncated
|
||||
|
After Width: | Height: | Size: 410 KiB |
@@ -0,0 +1,189 @@
|
||||
; 该脚本使用 HM VNISEdit 脚本编辑器向导产生
|
||||
|
||||
; 安装程序初始定义常量
|
||||
!define PRODUCT_NAME "丁墨创投"
|
||||
!define PRODUCT_VERSION "v12.61"
|
||||
;!define PRODUCT_PUBLISHER "${PRODUCT_NAME}软件制作组"
|
||||
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\29供应链.exe"
|
||||
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
||||
;!define PRODUCT_UNINST_ROOT_KEY "HKLM" ;需要管理员权限
|
||||
!define PRODUCT_UNINST_ROOT_KEY "HKCU"
|
||||
!define UTILS_PATH ".\Utils"
|
||||
!define SOURCE_PATH "..\Bin.Oem"
|
||||
!define OUT_PUT_PATH ".\Bin"
|
||||
|
||||
SetCompressor lzma
|
||||
|
||||
; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
|
||||
!include "MUI.nsh"
|
||||
|
||||
; MUI 预定义常量
|
||||
!define MUI_ABORTWARNING
|
||||
!define MUI_ICON "${SOURCE_PATH}\favicon.ico"
|
||||
;!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
|
||||
!define MUI_UNICON "${UTILS_PATH}\uninstall.ico"
|
||||
|
||||
; 语言选择窗口常量设置
|
||||
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
|
||||
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
|
||||
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
|
||||
|
||||
; 欢迎页面
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
; 许可协议页面
|
||||
!define MUI_LICENSEPAGE_CHECKBOX
|
||||
!insertmacro MUI_PAGE_LICENSE "${UTILS_PATH}\Licence.txt"
|
||||
; 安装目录选择页面
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
; 安装过程页面
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
; 安装完成页面
|
||||
;!define MUI_FINISHPAGE_RUN "$INSTDIR\29供应链.exe" ;win10直接启动会双开,以下改为使用函数启动
|
||||
;!define MUI_FINISHPAGE_RUN "exe_file" ;指定要运行的可执行文件路径(如 $INSTDIR\MyApp.exe)。文件名含空格时无需加引号 。
|
||||
;!define MUI_FINISHPAGE_RUN_TEXT "text" ;设置复选框旁的显示文本(例如:“立即运行我的应用”)。
|
||||
;!define MUI_FINISHPAGE_RUN_PARAMETERS "params" ;传入运行参数。若参数含双引号,需用 \" 转义 。
|
||||
;!define MUI_FINISHPAGE_RUN_NOTCHECKED ;默认不选中该复选框(即默认不运行)。
|
||||
;!define MUI_FINISHPAGE_RUN_FUNCTION "func_name" ;替代直接运行 exe,改为调用自定义 NSIS 函数(此时 MUI_FINISHPAGE_RUN 可不带参数),适合需执行多步逻辑的场景 。
|
||||
;示例================================================================================================================
|
||||
;!include "MUI2.nsh"
|
||||
|
||||
;!define MUI_FINISHPAGE_RUN "$INSTDIR\MyApp.exe"
|
||||
;!define MUI_FINISHPAGE_RUN_TEXT "启动应用程序"
|
||||
;!define MUI_FINISHPAGE_RUN_PARAMETERS "/silent"
|
||||
;;!define MUI_FINISHPAGE_RUN_NOTCHECKED
|
||||
|
||||
;!insertmacro MUI_PAGE_FINISH
|
||||
;示例结束============================================================================================================
|
||||
|
||||
!define MUI_FINISHPAGE_RUN
|
||||
;安装函数定义
|
||||
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchExe"
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
; 安装卸载过程页面
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
; 安装界面包含的语言设置
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
!insertmacro MUI_LANGUAGE "SimpChinese"
|
||||
|
||||
; 安装预释放文件
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
|
||||
; ------ MUI 现代界面定义结束 ------
|
||||
|
||||
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
||||
OutFile "${OUT_PUT_PATH}\${PRODUCT_NAME} ${PRODUCT_VERSION}.exe"
|
||||
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
|
||||
;InstallDir "D:\${PRODUCT_NAME}"
|
||||
;InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"
|
||||
InstallDirRegKey HKCU "${PRODUCT_UNINST_KEY}" "UninstallString"
|
||||
ShowInstDetails show
|
||||
ShowUnInstDetails show
|
||||
BrandingText "${PRODUCT_NAME}安装程序"
|
||||
|
||||
Section "MainSection" SEC01
|
||||
SetOutPath "$INSTDIR"
|
||||
;SetOverwrite on|off|try|ifnewer ;强制覆盖|不覆盖|仅覆盖可写文件|仅覆盖旧文件
|
||||
SetOverwrite on
|
||||
;/x 排除的目录或文件
|
||||
;File /r /x "Config.xml" /x "choice.debug.tools" /x "DB.dll" /x "Publish.exe" /x "AllBase.pdb" /x "Work.pdb" /x "29供应链.pdb" /x "data" "${SOURCE_PATH}\*.*"
|
||||
File /r /x "BaseClass.cs" /x "Config.xml" /x "choice.debug.tools" /x "DB.dll" /x "Publish.exe" /x "*.pdb" /x "*.zip" /x "data" /x "Cache" /x "29wx.lnk" /x "29wx.ico" /x "29pdd.lnk" /x "29pdd.ico" "${SOURCE_PATH}\*.*"
|
||||
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\29供应链.exe" "" "$INSTDIR\favicon.ico"
|
||||
CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\29供应链.exe" "" "$INSTDIR\favicon.ico"
|
||||
File "${SOURCE_PATH}\29供应链.exe"
|
||||
;SetOutPath "$TEMP"
|
||||
;File "${UTILS_PATH}\VC_redist_2015_2022.x64.exe"
|
||||
;ExecWait '$TEMP\vc_redist.x86.exe' # 一般(非静默)VC的安装
|
||||
;ExecWait '"$TEMP\vc_redist.x86.exe" /q' # silent install 静默安装
|
||||
SectionEnd
|
||||
|
||||
Section -AdditionalIcons
|
||||
SetOutPath $INSTDIR
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
|
||||
SectionEnd
|
||||
|
||||
Section -Post
|
||||
WriteUninstaller "$INSTDIR\uninst.exe"
|
||||
;WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\29供应链.exe"
|
||||
WriteRegStr HKCU "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\29供应链.exe"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\29供应链.exe"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_NAME}软件制作组"
|
||||
SectionEnd
|
||||
|
||||
#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
|
||||
|
||||
Function .onInit
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
FunctionEnd
|
||||
|
||||
;function要写字section之后
|
||||
Function LaunchExe
|
||||
;ExecShell "" "$INSTDIR\${PRODUCT_NAME}.exe"
|
||||
; 启动主程序,ExecWait 会等待程序启动后再继续(推荐用于确保启动成功)
|
||||
;ExecWait '"$INSTDIR\YourApp.exe"' // 等待也可以用来弹出必要组件安装时等待安装完成再继续运行安装程序。
|
||||
; 若希望安装程序立即关闭而不等待,可使用 Exec
|
||||
;Exec '"$INSTDIR\29供应链.exe"'
|
||||
Exec "$INSTDIR\29供应链.exe"
|
||||
; 以普通用户权限启动程序(即使安装包是管理员权限)
|
||||
;System::Call 'shell32::ShellExecute(i 0, t"open", t"explorer.exe", t"/e,$INSTDIR\start.bat", t"", i 0)'
|
||||
;Exec "$INSTDIR\start.bat"
|
||||
FunctionEnd
|
||||
|
||||
|
||||
/******************************
|
||||
* 以下是安装程序的卸载部分 *
|
||||
******************************/
|
||||
|
||||
Section Uninstall
|
||||
Delete "$INSTDIR\uninst.exe"
|
||||
Delete "$TEMP\vc_redist.x86.exe"
|
||||
Delete "$INSTDIR\29供应链.exe"
|
||||
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
|
||||
Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
|
||||
|
||||
RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
|
||||
|
||||
RMDir /r "$INSTDIR\blob_storage"
|
||||
RMDir /r "$INSTDIR\Cache"
|
||||
RMDir /r "$INSTDIR\config"
|
||||
RMDir /r "$INSTDIR\data"
|
||||
RMDir /r "$INSTDIR\DawnCache"
|
||||
RMDir /r "$INSTDIR\GPUCache"
|
||||
RMDir /r "$INSTDIR\locales"
|
||||
RMDir /r "$INSTDIR\log"
|
||||
RMDir /r "$INSTDIR\ru-ru"
|
||||
RMDir /r "$INSTDIR\static"
|
||||
RMDir /r "$INSTDIR\taobao"
|
||||
RMDir /r "$INSTDIR\temp"
|
||||
RMDir /r "$INSTDIR\upBak"
|
||||
RMDir /r "$INSTDIR\upTemp"
|
||||
RMDir /r "$INSTDIR\x64"
|
||||
RMDir /r "$INSTDIR\x86"
|
||||
|
||||
RMDir /r "$INSTDIR"
|
||||
|
||||
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
|
||||
;DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
|
||||
DeleteRegKey HKCU "${PRODUCT_DIR_REGKEY}"
|
||||
SetAutoClose true
|
||||
SectionEnd
|
||||
|
||||
#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
|
||||
|
||||
Function un.onInit
|
||||
!insertmacro MUI_UNGETLANGUAGE
|
||||
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
|
||||
Abort
|
||||
FunctionEnd
|
||||
|
||||
Function un.onUninstSuccess
|
||||
HideWindow
|
||||
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
|
||||
FunctionEnd
|
||||
@@ -0,0 +1,189 @@
|
||||
; 该脚本使用 HM VNISEdit 脚本编辑器向导产生
|
||||
|
||||
; 安装程序初始定义常量
|
||||
!define PRODUCT_NAME "云享供应链"
|
||||
!define PRODUCT_VERSION "v12.61"
|
||||
;!define PRODUCT_PUBLISHER "${PRODUCT_NAME}软件制作组"
|
||||
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\29供应链.exe"
|
||||
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
||||
;!define PRODUCT_UNINST_ROOT_KEY "HKLM" ;需要管理员权限
|
||||
!define PRODUCT_UNINST_ROOT_KEY "HKCU"
|
||||
!define UTILS_PATH ".\Utils"
|
||||
!define SOURCE_PATH "..\Bin.Oem"
|
||||
!define OUT_PUT_PATH ".\Bin"
|
||||
|
||||
SetCompressor lzma
|
||||
|
||||
; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
|
||||
!include "MUI.nsh"
|
||||
|
||||
; MUI 预定义常量
|
||||
!define MUI_ABORTWARNING
|
||||
!define MUI_ICON "${SOURCE_PATH}\favicon.ico"
|
||||
;!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
|
||||
!define MUI_UNICON "${UTILS_PATH}\uninstall.ico"
|
||||
|
||||
; 语言选择窗口常量设置
|
||||
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
|
||||
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
|
||||
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
|
||||
|
||||
; 欢迎页面
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
; 许可协议页面
|
||||
!define MUI_LICENSEPAGE_CHECKBOX
|
||||
!insertmacro MUI_PAGE_LICENSE "${UTILS_PATH}\Licence.txt"
|
||||
; 安装目录选择页面
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
; 安装过程页面
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
; 安装完成页面
|
||||
;!define MUI_FINISHPAGE_RUN "$INSTDIR\29供应链.exe" ;win10直接启动会双开,以下改为使用函数启动
|
||||
;!define MUI_FINISHPAGE_RUN "exe_file" ;指定要运行的可执行文件路径(如 $INSTDIR\MyApp.exe)。文件名含空格时无需加引号 。
|
||||
;!define MUI_FINISHPAGE_RUN_TEXT "text" ;设置复选框旁的显示文本(例如:“立即运行我的应用”)。
|
||||
;!define MUI_FINISHPAGE_RUN_PARAMETERS "params" ;传入运行参数。若参数含双引号,需用 \" 转义 。
|
||||
;!define MUI_FINISHPAGE_RUN_NOTCHECKED ;默认不选中该复选框(即默认不运行)。
|
||||
;!define MUI_FINISHPAGE_RUN_FUNCTION "func_name" ;替代直接运行 exe,改为调用自定义 NSIS 函数(此时 MUI_FINISHPAGE_RUN 可不带参数),适合需执行多步逻辑的场景 。
|
||||
;示例================================================================================================================
|
||||
;!include "MUI2.nsh"
|
||||
|
||||
;!define MUI_FINISHPAGE_RUN "$INSTDIR\MyApp.exe"
|
||||
;!define MUI_FINISHPAGE_RUN_TEXT "启动应用程序"
|
||||
;!define MUI_FINISHPAGE_RUN_PARAMETERS "/silent"
|
||||
;;!define MUI_FINISHPAGE_RUN_NOTCHECKED
|
||||
|
||||
;!insertmacro MUI_PAGE_FINISH
|
||||
;示例结束============================================================================================================
|
||||
|
||||
!define MUI_FINISHPAGE_RUN
|
||||
;安装函数定义
|
||||
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchExe"
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
; 安装卸载过程页面
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
; 安装界面包含的语言设置
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
!insertmacro MUI_LANGUAGE "SimpChinese"
|
||||
|
||||
; 安装预释放文件
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
|
||||
; ------ MUI 现代界面定义结束 ------
|
||||
|
||||
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
||||
OutFile "${OUT_PUT_PATH}\${PRODUCT_NAME} ${PRODUCT_VERSION}.exe"
|
||||
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
|
||||
;InstallDir "D:\${PRODUCT_NAME}"
|
||||
;InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"
|
||||
InstallDirRegKey HKCU "${PRODUCT_UNINST_KEY}" "UninstallString"
|
||||
ShowInstDetails show
|
||||
ShowUnInstDetails show
|
||||
BrandingText "${PRODUCT_NAME}安装程序"
|
||||
|
||||
Section "MainSection" SEC01
|
||||
SetOutPath "$INSTDIR"
|
||||
;SetOverwrite on|off|try|ifnewer ;强制覆盖|不覆盖|仅覆盖可写文件|仅覆盖旧文件
|
||||
SetOverwrite on
|
||||
;/x 排除的目录或文件
|
||||
;File /r /x "Config.xml" /x "choice.debug.tools" /x "DB.dll" /x "Publish.exe" /x "AllBase.pdb" /x "Work.pdb" /x "29供应链.pdb" /x "data" "${SOURCE_PATH}\*.*"
|
||||
File /r /x "BaseClass.cs" /x "Config.xml" /x "choice.debug.tools" /x "DB.dll" /x "Publish.exe" /x "*.pdb" /x "*.zip" /x "data" /x "Cache" /x "29wx.lnk" /x "29wx.ico" /x "29pdd.lnk" /x "29pdd.ico" "${SOURCE_PATH}\*.*"
|
||||
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\29供应链.exe" "" "$INSTDIR\favicon.ico"
|
||||
CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\29供应链.exe" "" "$INSTDIR\favicon.ico"
|
||||
File "${SOURCE_PATH}\29供应链.exe"
|
||||
;SetOutPath "$TEMP"
|
||||
;File "${UTILS_PATH}\VC_redist_2015_2022.x64.exe"
|
||||
;ExecWait '$TEMP\vc_redist.x86.exe' # 一般(非静默)VC的安装
|
||||
;ExecWait '"$TEMP\vc_redist.x86.exe" /q' # silent install 静默安装
|
||||
SectionEnd
|
||||
|
||||
Section -AdditionalIcons
|
||||
SetOutPath $INSTDIR
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
|
||||
SectionEnd
|
||||
|
||||
Section -Post
|
||||
WriteUninstaller "$INSTDIR\uninst.exe"
|
||||
;WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\29供应链.exe"
|
||||
WriteRegStr HKCU "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\29供应链.exe"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\29供应链.exe"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
|
||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_NAME}软件制作组"
|
||||
SectionEnd
|
||||
|
||||
#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
|
||||
|
||||
Function .onInit
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
FunctionEnd
|
||||
|
||||
;function要写字section之后
|
||||
Function LaunchExe
|
||||
;ExecShell "" "$INSTDIR\${PRODUCT_NAME}.exe"
|
||||
; 启动主程序,ExecWait 会等待程序启动后再继续(推荐用于确保启动成功)
|
||||
;ExecWait '"$INSTDIR\YourApp.exe"' // 等待也可以用来弹出必要组件安装时等待安装完成再继续运行安装程序。
|
||||
; 若希望安装程序立即关闭而不等待,可使用 Exec
|
||||
;Exec '"$INSTDIR\29供应链.exe"'
|
||||
Exec "$INSTDIR\29供应链.exe"
|
||||
; 以普通用户权限启动程序(即使安装包是管理员权限)
|
||||
;System::Call 'shell32::ShellExecute(i 0, t"open", t"explorer.exe", t"/e,$INSTDIR\start.bat", t"", i 0)'
|
||||
;Exec "$INSTDIR\start.bat"
|
||||
FunctionEnd
|
||||
|
||||
|
||||
/******************************
|
||||
* 以下是安装程序的卸载部分 *
|
||||
******************************/
|
||||
|
||||
Section Uninstall
|
||||
Delete "$INSTDIR\uninst.exe"
|
||||
Delete "$TEMP\vc_redist.x86.exe"
|
||||
Delete "$INSTDIR\29供应链.exe"
|
||||
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
|
||||
Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk"
|
||||
|
||||
RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
|
||||
|
||||
RMDir /r "$INSTDIR\blob_storage"
|
||||
RMDir /r "$INSTDIR\Cache"
|
||||
RMDir /r "$INSTDIR\config"
|
||||
RMDir /r "$INSTDIR\data"
|
||||
RMDir /r "$INSTDIR\DawnCache"
|
||||
RMDir /r "$INSTDIR\GPUCache"
|
||||
RMDir /r "$INSTDIR\locales"
|
||||
RMDir /r "$INSTDIR\log"
|
||||
RMDir /r "$INSTDIR\ru-ru"
|
||||
RMDir /r "$INSTDIR\static"
|
||||
RMDir /r "$INSTDIR\taobao"
|
||||
RMDir /r "$INSTDIR\temp"
|
||||
RMDir /r "$INSTDIR\upBak"
|
||||
RMDir /r "$INSTDIR\upTemp"
|
||||
RMDir /r "$INSTDIR\x64"
|
||||
RMDir /r "$INSTDIR\x86"
|
||||
|
||||
RMDir /r "$INSTDIR"
|
||||
|
||||
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
|
||||
;DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
|
||||
DeleteRegKey HKCU "${PRODUCT_DIR_REGKEY}"
|
||||
SetAutoClose true
|
||||
SectionEnd
|
||||
|
||||
#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
|
||||
|
||||
Function un.onInit
|
||||
!insertmacro MUI_UNGETLANGUAGE
|
||||
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
|
||||
Abort
|
||||
FunctionEnd
|
||||
|
||||
Function un.onUninstSuccess
|
||||
HideWindow
|
||||
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
|
||||
FunctionEnd
|
||||
@@ -44,6 +44,9 @@
|
||||
<Compile Update="InitForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Update="KJDForms\SystemForms\SystemUploadConfigForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Update="KJDForms\SystemForms\SystemGoodsComplianceForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
|
||||
@@ -30,9 +30,10 @@
|
||||
{
|
||||
System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("解除限制");
|
||||
System.Windows.Forms.TreeNode violationNode = new System.Windows.Forms.TreeNode("违规检测");
|
||||
System.Windows.Forms.TreeNode uploadConfigNode = new System.Windows.Forms.TreeNode("上货配置");
|
||||
System.Windows.Forms.TreeNode complianceNode = new System.Windows.Forms.TreeNode("商品 AI 检测");
|
||||
System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("系统设置", new System.Windows.Forms.TreeNode[] {
|
||||
treeNode1, violationNode, complianceNode});
|
||||
treeNode1, violationNode,complianceNode, uploadConfigNode});
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.panel3 = new System.Windows.Forms.Panel();
|
||||
this.panel2 = new System.Windows.Forms.Panel();
|
||||
@@ -108,6 +109,7 @@
|
||||
complianceNode.Name = "商品 AI 检测";
|
||||
violationNode.Name = "违规检测";
|
||||
violationNode.Text = "违规检测";
|
||||
uploadConfigNode.Name = "上货配置";
|
||||
treeNode2.Name = "系统设置";
|
||||
treeNode2.Text = "系统设置";
|
||||
this.tv.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
|
||||
|
||||
@@ -16,6 +16,7 @@ namespace TemuKJD.KJDForms.SystemForms
|
||||
{
|
||||
public Lazy<SystemRemoveRestrictionsForm> systemRemoveRestrictionsForm = new Lazy<SystemRemoveRestrictionsForm>();
|
||||
public Lazy<SystemViolationDetectionForm> systemViolationDetectionForm = new Lazy<SystemViolationDetectionForm>();
|
||||
public Lazy<SystemUploadConfigForm> systemUploadConfigForm = new Lazy<SystemUploadConfigForm>();
|
||||
private readonly Lazy<SystemGoodsComplianceForm> goodsComplianceForm = new Lazy<SystemGoodsComplianceForm>();
|
||||
|
||||
public SystemForm()
|
||||
@@ -55,6 +56,9 @@ namespace TemuKJD.KJDForms.SystemForms
|
||||
case "违规检测":
|
||||
SetForm(systemViolationDetectionForm.Value);
|
||||
break;
|
||||
case "上货配置":
|
||||
SetForm(systemUploadConfigForm.Value);
|
||||
break;
|
||||
//case "商品管理":
|
||||
// SetForm(shopProductForm.Value);
|
||||
// break;
|
||||
|
||||
@@ -0,0 +1,279 @@
|
||||
namespace TemuKJD.KJDForms.SystemForms
|
||||
{
|
||||
partial class SystemUploadConfigForm
|
||||
{
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && components != null)
|
||||
components.Dispose();
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.contentLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.grpReturnAddress = new System.Windows.Forms.GroupBox();
|
||||
this.returnAddressLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblReturnAddressPolicy = new System.Windows.Forms.Label();
|
||||
this.chkUseOrderReturnWarehouseAddress = new TemuKJD.UserComponent.UcCheckBox(this.components);
|
||||
this.cmbReturnAddressPolicy = new System.Windows.Forms.ComboBox();
|
||||
this.sensitiveWordsLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.cmbSensitiveWordsPolicy = new System.Windows.Forms.ComboBox();
|
||||
this.txtSensitiveWords = new System.Windows.Forms.TextBox();
|
||||
this.lblSensitiveWordsPolicy = new System.Windows.Forms.Label();
|
||||
this.grpSensitiveWords = new System.Windows.Forms.GroupBox();
|
||||
this.footerLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.btnSave = new System.Windows.Forms.Button();
|
||||
this.btnLoad = new System.Windows.Forms.Button();
|
||||
this.lblStatus = new System.Windows.Forms.Label();
|
||||
this.contentLayout.SuspendLayout();
|
||||
this.grpReturnAddress.SuspendLayout();
|
||||
this.returnAddressLayout.SuspendLayout();
|
||||
this.sensitiveWordsLayout.SuspendLayout();
|
||||
this.grpSensitiveWords.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// contentLayout
|
||||
//
|
||||
this.contentLayout.AutoSize = true;
|
||||
this.contentLayout.ColumnCount = 1;
|
||||
this.contentLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.contentLayout.Controls.Add(this.grpReturnAddress, 0, 0);
|
||||
this.contentLayout.Controls.Add(this.grpSensitiveWords, 0, 1);
|
||||
this.contentLayout.Controls.Add(this.footerLayout, 0, 2);
|
||||
this.contentLayout.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.contentLayout.Location = new System.Drawing.Point(12, 12);
|
||||
this.contentLayout.MinimumSize = new System.Drawing.Size(560, 0);
|
||||
this.contentLayout.Name = "contentLayout";
|
||||
this.contentLayout.RowCount = 3;
|
||||
this.contentLayout.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.contentLayout.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.contentLayout.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.contentLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.contentLayout.Size = new System.Drawing.Size(836, 214);
|
||||
this.contentLayout.TabIndex = 0;
|
||||
//
|
||||
// grpReturnAddress
|
||||
//
|
||||
this.grpReturnAddress.Controls.Add(this.returnAddressLayout);
|
||||
this.grpReturnAddress.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.grpReturnAddress.Location = new System.Drawing.Point(0, 0);
|
||||
this.grpReturnAddress.Margin = new System.Windows.Forms.Padding(0, 0, 0, 8);
|
||||
this.grpReturnAddress.Name = "grpReturnAddress";
|
||||
this.grpReturnAddress.Padding = new System.Windows.Forms.Padding(10);
|
||||
this.grpReturnAddress.Size = new System.Drawing.Size(836, 64);
|
||||
this.grpReturnAddress.TabIndex = 0;
|
||||
this.grpReturnAddress.TabStop = false;
|
||||
this.grpReturnAddress.Text = "使用拍单退货仓库地址";
|
||||
//
|
||||
// returnAddressLayout
|
||||
//
|
||||
this.returnAddressLayout.ColumnCount = 3;
|
||||
this.returnAddressLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.returnAddressLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.returnAddressLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 108F));
|
||||
this.returnAddressLayout.Controls.Add(this.lblReturnAddressPolicy, 1, 0);
|
||||
this.returnAddressLayout.Controls.Add(this.chkUseOrderReturnWarehouseAddress, 0, 0);
|
||||
this.returnAddressLayout.Controls.Add(this.cmbReturnAddressPolicy, 2, 0);
|
||||
this.returnAddressLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.returnAddressLayout.Location = new System.Drawing.Point(10, 26);
|
||||
this.returnAddressLayout.Name = "returnAddressLayout";
|
||||
this.returnAddressLayout.RowCount = 1;
|
||||
this.returnAddressLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.returnAddressLayout.Size = new System.Drawing.Size(816, 28);
|
||||
this.returnAddressLayout.TabIndex = 0;
|
||||
//
|
||||
// lblReturnAddressPolicy
|
||||
//
|
||||
this.lblReturnAddressPolicy.AutoSize = true;
|
||||
this.lblReturnAddressPolicy.Location = new System.Drawing.Point(644, 4);
|
||||
this.lblReturnAddressPolicy.Margin = new System.Windows.Forms.Padding(12, 4, 8, 0);
|
||||
this.lblReturnAddressPolicy.Name = "lblReturnAddressPolicy";
|
||||
this.lblReturnAddressPolicy.Size = new System.Drawing.Size(56, 17);
|
||||
this.lblReturnAddressPolicy.TabIndex = 0;
|
||||
this.lblReturnAddressPolicy.Text = "继承策略";
|
||||
//
|
||||
// chkUseOrderReturnWarehouseAddress
|
||||
//
|
||||
this.chkUseOrderReturnWarehouseAddress.AccessibleName = "使用拍单退货仓库地址";
|
||||
this.chkUseOrderReturnWarehouseAddress.AutoSize = true;
|
||||
this.chkUseOrderReturnWarehouseAddress.Location = new System.Drawing.Point(0, 2);
|
||||
this.chkUseOrderReturnWarehouseAddress.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
|
||||
this.chkUseOrderReturnWarehouseAddress.Name = "chkUseOrderReturnWarehouseAddress";
|
||||
this.chkUseOrderReturnWarehouseAddress.Size = new System.Drawing.Size(51, 21);
|
||||
this.chkUseOrderReturnWarehouseAddress.TabIndex = 0;
|
||||
this.chkUseOrderReturnWarehouseAddress.Text = "启用";
|
||||
//
|
||||
// cmbReturnAddressPolicy
|
||||
//
|
||||
this.cmbReturnAddressPolicy.AccessibleName = "使用拍单退货仓库地址继承策略";
|
||||
this.cmbReturnAddressPolicy.DisplayMember = "Text";
|
||||
this.cmbReturnAddressPolicy.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.cmbReturnAddressPolicy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbReturnAddressPolicy.Location = new System.Drawing.Point(708, 0);
|
||||
this.cmbReturnAddressPolicy.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.cmbReturnAddressPolicy.Name = "cmbReturnAddressPolicy";
|
||||
this.cmbReturnAddressPolicy.Size = new System.Drawing.Size(108, 25);
|
||||
this.cmbReturnAddressPolicy.TabIndex = 1;
|
||||
this.cmbReturnAddressPolicy.ValueMember = "Value";
|
||||
//
|
||||
// sensitiveWordsLayout
|
||||
//
|
||||
this.sensitiveWordsLayout.ColumnCount = 3;
|
||||
this.sensitiveWordsLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.sensitiveWordsLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.sensitiveWordsLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 108F));
|
||||
this.sensitiveWordsLayout.Controls.Add(this.lblSensitiveWordsPolicy, 1, 0);
|
||||
this.sensitiveWordsLayout.Controls.Add(this.txtSensitiveWords, 0, 0);
|
||||
this.sensitiveWordsLayout.Controls.Add(this.cmbSensitiveWordsPolicy, 2, 0);
|
||||
this.sensitiveWordsLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.sensitiveWordsLayout.Location = new System.Drawing.Point(10, 26);
|
||||
this.sensitiveWordsLayout.Name = "sensitiveWordsLayout";
|
||||
this.sensitiveWordsLayout.RowCount = 1;
|
||||
this.sensitiveWordsLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.sensitiveWordsLayout.Size = new System.Drawing.Size(816, 94);
|
||||
this.sensitiveWordsLayout.TabIndex = 0;
|
||||
//
|
||||
// cmbSensitiveWordsPolicy
|
||||
//
|
||||
this.cmbSensitiveWordsPolicy.AccessibleName = "敏感词继承策略";
|
||||
this.cmbSensitiveWordsPolicy.DisplayMember = "Text";
|
||||
this.cmbSensitiveWordsPolicy.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.cmbSensitiveWordsPolicy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbSensitiveWordsPolicy.Location = new System.Drawing.Point(708, 0);
|
||||
this.cmbSensitiveWordsPolicy.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.cmbSensitiveWordsPolicy.Name = "cmbSensitiveWordsPolicy";
|
||||
this.cmbSensitiveWordsPolicy.Size = new System.Drawing.Size(108, 25);
|
||||
this.cmbSensitiveWordsPolicy.TabIndex = 1;
|
||||
this.cmbSensitiveWordsPolicy.ValueMember = "Value";
|
||||
//
|
||||
// txtSensitiveWords
|
||||
//
|
||||
this.txtSensitiveWords.AcceptsReturn = true;
|
||||
this.txtSensitiveWords.AccessibleName = "敏感词";
|
||||
this.txtSensitiveWords.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtSensitiveWords.Location = new System.Drawing.Point(0, 0);
|
||||
this.txtSensitiveWords.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.txtSensitiveWords.Multiline = true;
|
||||
this.txtSensitiveWords.Name = "txtSensitiveWords";
|
||||
this.txtSensitiveWords.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.txtSensitiveWords.Size = new System.Drawing.Size(632, 94);
|
||||
this.txtSensitiveWords.TabIndex = 0;
|
||||
//
|
||||
// lblSensitiveWordsPolicy
|
||||
//
|
||||
this.lblSensitiveWordsPolicy.AutoSize = true;
|
||||
this.lblSensitiveWordsPolicy.Location = new System.Drawing.Point(644, 4);
|
||||
this.lblSensitiveWordsPolicy.Margin = new System.Windows.Forms.Padding(12, 4, 8, 0);
|
||||
this.lblSensitiveWordsPolicy.Name = "lblSensitiveWordsPolicy";
|
||||
this.lblSensitiveWordsPolicy.Size = new System.Drawing.Size(56, 17);
|
||||
this.lblSensitiveWordsPolicy.TabIndex = 0;
|
||||
this.lblSensitiveWordsPolicy.Text = "继承策略";
|
||||
//
|
||||
// grpSensitiveWords
|
||||
//
|
||||
this.grpSensitiveWords.Controls.Add(this.sensitiveWordsLayout);
|
||||
this.grpSensitiveWords.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.grpSensitiveWords.Location = new System.Drawing.Point(0, 72);
|
||||
this.grpSensitiveWords.Margin = new System.Windows.Forms.Padding(0, 0, 0, 8);
|
||||
this.grpSensitiveWords.Name = "grpSensitiveWords";
|
||||
this.grpSensitiveWords.Padding = new System.Windows.Forms.Padding(10);
|
||||
this.grpSensitiveWords.Size = new System.Drawing.Size(836, 130);
|
||||
this.grpSensitiveWords.TabIndex = 1;
|
||||
this.grpSensitiveWords.TabStop = false;
|
||||
this.grpSensitiveWords.Text = "敏感词(每行一个)";
|
||||
//
|
||||
// footerLayout
|
||||
//
|
||||
this.footerLayout.AutoSize = true;
|
||||
this.footerLayout.ColumnCount = 1;
|
||||
this.footerLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.footerLayout.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.footerLayout.Location = new System.Drawing.Point(0, 214);
|
||||
this.footerLayout.Margin = new System.Windows.Forms.Padding(0, 4, 0, 0);
|
||||
this.footerLayout.Name = "footerLayout";
|
||||
this.footerLayout.RowCount = 1;
|
||||
this.footerLayout.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.footerLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.footerLayout.Size = new System.Drawing.Size(836, 0);
|
||||
this.footerLayout.TabIndex = 2;
|
||||
//
|
||||
// btnSave
|
||||
//
|
||||
this.btnSave.Location = new System.Drawing.Point(21, 239);
|
||||
this.btnSave.Name = "btnSave";
|
||||
this.btnSave.Size = new System.Drawing.Size(75, 33);
|
||||
this.btnSave.TabIndex = 5;
|
||||
this.btnSave.Text = "保存配置";
|
||||
this.btnSave.UseVisualStyleBackColor = true;
|
||||
this.btnSave.Click += new System.EventHandler(this.Save_Click);
|
||||
//
|
||||
// btnLoad
|
||||
//
|
||||
this.btnLoad.Location = new System.Drawing.Point(102, 239);
|
||||
this.btnLoad.Name = "btnLoad";
|
||||
this.btnLoad.Size = new System.Drawing.Size(75, 33);
|
||||
this.btnLoad.TabIndex = 6;
|
||||
this.btnLoad.Text = "读取配置";
|
||||
this.btnLoad.UseVisualStyleBackColor = true;
|
||||
this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click);
|
||||
//
|
||||
// lblStatus
|
||||
//
|
||||
this.lblStatus.AutoSize = true;
|
||||
this.lblStatus.Location = new System.Drawing.Point(196, 247);
|
||||
this.lblStatus.Name = "lblStatus";
|
||||
this.lblStatus.Size = new System.Drawing.Size(43, 17);
|
||||
this.lblStatus.TabIndex = 7;
|
||||
this.lblStatus.Text = "label1";
|
||||
//
|
||||
// SystemUploadConfigForm
|
||||
//
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||
this.AutoScroll = true;
|
||||
this.ClientSize = new System.Drawing.Size(860, 450);
|
||||
this.Controls.Add(this.lblStatus);
|
||||
this.Controls.Add(this.btnLoad);
|
||||
this.Controls.Add(this.btnSave);
|
||||
this.Controls.Add(this.contentLayout);
|
||||
this.Font = new System.Drawing.Font("微软雅黑", 9F);
|
||||
this.Name = "SystemUploadConfigForm";
|
||||
this.Padding = new System.Windows.Forms.Padding(12);
|
||||
this.Text = "上货配置";
|
||||
this.contentLayout.ResumeLayout(false);
|
||||
this.contentLayout.PerformLayout();
|
||||
this.grpReturnAddress.ResumeLayout(false);
|
||||
this.returnAddressLayout.ResumeLayout(false);
|
||||
this.returnAddressLayout.PerformLayout();
|
||||
this.sensitiveWordsLayout.ResumeLayout(false);
|
||||
this.sensitiveWordsLayout.PerformLayout();
|
||||
this.grpSensitiveWords.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel contentLayout;
|
||||
private System.Windows.Forms.GroupBox grpReturnAddress;
|
||||
private System.Windows.Forms.TableLayoutPanel returnAddressLayout;
|
||||
private System.Windows.Forms.Label lblReturnAddressPolicy;
|
||||
private TemuKJD.UserComponent.UcCheckBox chkUseOrderReturnWarehouseAddress;
|
||||
private System.Windows.Forms.ComboBox cmbReturnAddressPolicy;
|
||||
private System.Windows.Forms.GroupBox grpSensitiveWords;
|
||||
private System.Windows.Forms.TableLayoutPanel sensitiveWordsLayout;
|
||||
private System.Windows.Forms.Label lblSensitiveWordsPolicy;
|
||||
private System.Windows.Forms.TextBox txtSensitiveWords;
|
||||
private System.Windows.Forms.ComboBox cmbSensitiveWordsPolicy;
|
||||
private System.Windows.Forms.TableLayoutPanel footerLayout;
|
||||
private System.Windows.Forms.Button btnSave;
|
||||
private System.Windows.Forms.Button btnLoad;
|
||||
private System.Windows.Forms.Label lblStatus;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,189 @@
|
||||
using AllBase;
|
||||
using AllBase.Model.Result;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using TemuKJD.BaseForms;
|
||||
using Work;
|
||||
|
||||
namespace TemuKJD.KJDForms.SystemForms
|
||||
{
|
||||
public partial class SystemUploadConfigForm : BaseForm
|
||||
{
|
||||
private UserConfig config = new UserConfig();
|
||||
private readonly bool IsMainUser;
|
||||
private bool isBusy;
|
||||
|
||||
public SystemUploadConfigForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
IsMainUser = BaseClass.GroupId == 3;
|
||||
InitializePolicy(cmbSensitiveWordsPolicy);
|
||||
InitializePolicy(cmbReturnAddressPolicy);
|
||||
UpdateAccess();
|
||||
lblStatus.Text = IsMainUser ? "可编辑、保存和读取配置。" : "当前账号只读。";
|
||||
Load += btnLoad_Click;
|
||||
}
|
||||
|
||||
private void UpdateAccess()
|
||||
{
|
||||
bool canEdit = IsMainUser && !isBusy;
|
||||
txtSensitiveWords.ReadOnly = !canEdit;
|
||||
chkUseOrderReturnWarehouseAddress.Enabled = canEdit;
|
||||
cmbSensitiveWordsPolicy.Enabled = canEdit;
|
||||
cmbReturnAddressPolicy.Enabled = canEdit;
|
||||
btnSave.Visible = IsMainUser;
|
||||
btnSave.Enabled = canEdit;
|
||||
btnLoad.Enabled = !isBusy;
|
||||
}
|
||||
|
||||
private async void btnLoad_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (isBusy) return;
|
||||
if (string.IsNullOrWhiteSpace(BaseClass.UserName))
|
||||
{
|
||||
lblStatus.Text = "读取失败:当前登录账号为空。";
|
||||
return;
|
||||
}
|
||||
|
||||
isBusy = true;
|
||||
UpdateAccess();
|
||||
lblStatus.Text = "正在读取配置…";
|
||||
try
|
||||
{
|
||||
ApplyConfig(await LoadConfigAsync());
|
||||
lblStatus.Text = IsMainUser ? "配置已读取。" : "配置已读取,当前账号只读。";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
lblStatus.Text = "读取失败:" + ex.Message;
|
||||
}
|
||||
finally
|
||||
{
|
||||
isBusy = false;
|
||||
UpdateAccess();
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyConfig(UserConfig loadedConfig)
|
||||
{
|
||||
loadedConfig.Configs.TryGetValue(UserConfig.SensitiveWordsKey, out var words);
|
||||
loadedConfig.Configs.TryGetValue(UserConfig.UseOrderReturnWarehouseAddressKey, out var address);
|
||||
if ((words != null && !Enum.IsDefined(typeof(UserConfig.InheritPolicy), words.Policy)) ||
|
||||
(address != null && !Enum.IsDefined(typeof(UserConfig.InheritPolicy), address.Policy)))
|
||||
throw new InvalidOperationException("云端配置包含无效的继承策略。");
|
||||
|
||||
bool useAddress = false;
|
||||
if (address != null && !bool.TryParse(address.Value, out useAddress))
|
||||
throw new InvalidOperationException("云端退货仓库地址开关值无效。");
|
||||
|
||||
txtSensitiveWords.Text = words?.Value ?? string.Empty;
|
||||
cmbSensitiveWordsPolicy.SelectedValue = words?.Policy ?? UserConfig.InheritPolicy.Free;
|
||||
chkUseOrderReturnWarehouseAddress.Checked = useAddress;
|
||||
cmbReturnAddressPolicy.SelectedValue = address?.Policy ?? UserConfig.InheritPolicy.Free;
|
||||
config = loadedConfig;
|
||||
}
|
||||
|
||||
private async void Save_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsMainUser)
|
||||
{
|
||||
lblStatus.Text = "当前账号只读,只有主账号可以保存配置。";
|
||||
return;
|
||||
}
|
||||
if (isBusy) return;
|
||||
if (string.IsNullOrWhiteSpace(BaseClass.UserName))
|
||||
{
|
||||
lblStatus.Text = "保存失败:当前登录账号为空。";
|
||||
return;
|
||||
}
|
||||
|
||||
isBusy = true;
|
||||
UpdateAccess();
|
||||
lblStatus.Text = "正在保存配置…";
|
||||
try
|
||||
{
|
||||
config.Configs[UserConfig.SensitiveWordsKey] = new UserConfig.ConfigItem
|
||||
{
|
||||
Key = UserConfig.SensitiveWordsKey,
|
||||
Value = txtSensitiveWords.Text,
|
||||
Policy = (UserConfig.InheritPolicy)cmbSensitiveWordsPolicy.SelectedValue
|
||||
};
|
||||
config.Configs[UserConfig.UseOrderReturnWarehouseAddressKey] = new UserConfig.ConfigItem
|
||||
{
|
||||
Key = UserConfig.UseOrderReturnWarehouseAddressKey,
|
||||
Value = chkUseOrderReturnWarehouseAddress.Checked.ToString(),
|
||||
Policy = (UserConfig.InheritPolicy)cmbReturnAddressPolicy.SelectedValue
|
||||
};
|
||||
await UploadConfigAsync(JsonConvert.SerializeObject(config));
|
||||
lblStatus.Text = "配置已保存。";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
lblStatus.Text = "保存失败:" + ex.Message;
|
||||
}
|
||||
finally
|
||||
{
|
||||
isBusy = false;
|
||||
UpdateAccess();
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<UserConfig> LoadConfigAsync()
|
||||
{
|
||||
var url = BaseClass.BuildObjString("user/getUserConfig");
|
||||
var data = UserLogin.GetSignPostData(new { });
|
||||
var html = await GetHtml.PostJsonAsync(url, data);
|
||||
return ParseConfigResponse(html);
|
||||
}
|
||||
|
||||
private static UserConfig ParseConfigResponse(string html)
|
||||
{
|
||||
var ret = JsonConvert.DeserializeObject<Result<string>>(html);
|
||||
if (ret == null)
|
||||
throw new InvalidOperationException("服务器返回为空。");
|
||||
if (ret.Code != 200)
|
||||
throw new InvalidOperationException(ret.Msg ?? "读取配置失败。");
|
||||
if (ret.Data == null)
|
||||
throw new InvalidOperationException("服务器未返回配置数据。");
|
||||
if (string.IsNullOrWhiteSpace(ret.Data))
|
||||
return new UserConfig();
|
||||
|
||||
var loadedConfig = JsonConvert.DeserializeObject<UserConfig>(ret.Data);
|
||||
if (loadedConfig?.Configs == null)
|
||||
throw new InvalidOperationException("云端配置格式无效。");
|
||||
return loadedConfig;
|
||||
}
|
||||
|
||||
private async Task UploadConfigAsync(string configJson)
|
||||
{
|
||||
if (!IsMainUser)
|
||||
throw new InvalidOperationException("只有主账号可以保存配置。");
|
||||
var url = BaseClass.BuildObjString("user/saveUserConfig");
|
||||
var data = UserLogin.GetSignPostData(new { Config = configJson });
|
||||
var html = await GetHtml.PostJsonAsync(url, data);
|
||||
var ret = JsonConvert.DeserializeObject<Result>(html);
|
||||
if (ret == null)
|
||||
throw new InvalidOperationException("服务器返回为空。");
|
||||
if (ret.Code != 200)
|
||||
throw new InvalidOperationException(ret.Msg ?? "保存配置失败。");
|
||||
}
|
||||
|
||||
private sealed class UserConfigData
|
||||
{
|
||||
[JsonProperty(Required = Required.AllowNull)]
|
||||
public string Config { get; set; }
|
||||
}
|
||||
|
||||
private static void InitializePolicy(ComboBox comboBox)
|
||||
{
|
||||
comboBox.DataSource = new[]
|
||||
{
|
||||
new { Text = "自由", Value = UserConfig.InheritPolicy.Free },
|
||||
new { Text = "锁定", Value = UserConfig.InheritPolicy.Locked },
|
||||
new { Text = "仅追加", Value = UserConfig.InheritPolicy.AppendOnly }
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@@ -112,6 +112,8 @@ namespace TemuKJD.WXForms.AdminForms
|
||||
authority += chkSpBrand.Text + ","; // 定向品牌
|
||||
if (chkActivityStock.Checked)
|
||||
authority += chkActivityStock.Text + ","; // 活动库存
|
||||
if (chkTraditionalAddress.Checked)
|
||||
authority += chkTraditionalAddress.Text + ","; // 繁体地址
|
||||
data.Append("&authority=" + authority.Trim(','));
|
||||
|
||||
string url = BaseClass.BuildObjString("user/add_user");
|
||||
@@ -267,6 +269,7 @@ namespace TemuKJD.WXForms.AdminForms
|
||||
chkHot.Checked = false;
|
||||
chkShopPoints.Checked = false;
|
||||
chkProdFission.Checked = false;
|
||||
chkTraditionalAddress.Checked = false;
|
||||
}
|
||||
|
||||
private void btnRefresh_Click(object sender, EventArgs e)
|
||||
@@ -321,6 +324,7 @@ namespace TemuKJD.WXForms.AdminForms
|
||||
chkCommissionUpdate.Checked = authority.Contains(chkCommissionUpdate.Text);
|
||||
chkHot.Checked = authority.Contains(chkHot.Text);
|
||||
chkWXShowProdGetFromType.Checked = authority.Contains(chkWXShowProdGetFromType.Text);
|
||||
chkTraditionalAddress.Checked = authority.Contains(chkTraditionalAddress.Text);
|
||||
}
|
||||
if (columText == "删除")
|
||||
{
|
||||
|
||||
@@ -32,6 +32,7 @@ using System.Windows.Forms;
|
||||
using TemuKJD.BaseForms;
|
||||
using TemuKJD.BLL;
|
||||
using TemuKJD.Extension;
|
||||
using TemuKJD.KJDForms.SystemForms;
|
||||
using TemuKJD.PDDForms.ProductSelectForms;
|
||||
using TemuKJD.ToolForms;
|
||||
using TemuKJD.UserControls;
|
||||
@@ -86,9 +87,55 @@ namespace TemuKJD.WXForms.ProductForms
|
||||
DataContext<WaitingProductConfig> _bs;
|
||||
|
||||
WaitingProductConfig waiting_product_config = new WaitingProductConfig();
|
||||
private UserConfig UserConfig { get; set; } = new();
|
||||
void InitUserConfig()
|
||||
{
|
||||
Task.Run(async () =>
|
||||
{
|
||||
UserConfig = await SystemUploadConfigForm.LoadConfigAsync();
|
||||
|
||||
if (UserConfig != null)
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
if (UserConfig.TryGetConfig(UserConfig.UseOrderReturnWarehouseAddressKey, out UserConfig.ConfigItem addItem))
|
||||
{
|
||||
chkUseShanghaiReturnOrderAddress.Enabled = addItem.Policy != UserConfig.InheritPolicy.Locked;
|
||||
chkUseShanghaiReturnOrderAddress.Checked = addItem.Value.ParseToBool(false);
|
||||
}
|
||||
|
||||
if (UserConfig.TryGetConfig(UserConfig.SensitiveWordsKey, out UserConfig.ConfigItem filterItem))
|
||||
{
|
||||
txtReplaceText.Enabled = filterItem.Policy != UserConfig.InheritPolicy.Locked;
|
||||
|
||||
if (filterItem.Policy == UserConfig.InheritPolicy.Locked)
|
||||
{
|
||||
txtReplaceText.Enabled = false;
|
||||
txtReplaceText.Text = filterItem.Value;
|
||||
}
|
||||
else if (filterItem.Policy == UserConfig.InheritPolicy.AppendOnly)
|
||||
{
|
||||
txtReplaceText.Enabled = false;
|
||||
txtReplaceText.Text += filterItem.Value;
|
||||
}
|
||||
else if (filterItem.Policy == UserConfig.InheritPolicy.Free)
|
||||
{
|
||||
if (string.IsNullOrEmpty(txtReplaceText.Text))
|
||||
{
|
||||
txtReplaceText.Text = filterItem.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
||||
void InitWaitingProductConfigBinding()
|
||||
{
|
||||
InitUserConfig();
|
||||
|
||||
|
||||
Debug.WriteLine($"初始化配置");
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
@@ -125,7 +172,6 @@ namespace TemuKJD.WXForms.ProductForms
|
||||
numFilterSaleCountNum.Bind(_bs, a => a.Value, a => a.FilterSaleCountNum);
|
||||
}));
|
||||
Debug.WriteLine($"初始化配置END");
|
||||
|
||||
}
|
||||
private void UserSelectDbProductForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
@@ -1646,9 +1692,9 @@ namespace TemuKJD.WXForms.ProductForms
|
||||
|
||||
string UploadProduct(ShopLoginInfo shop, KJDDBProduct dbProd, TemuDBProductSelect selectProd, DataGridViewCell cell, DateTime startTime)
|
||||
{
|
||||
PlatformType Platform = (dbProd.product_get_type_text.Contains("多多")
|
||||
PlatformType Platform = (dbProd.product_get_type_text.Contains("多多")
|
||||
? PlatformType.PDD :
|
||||
dbProd.product_get_type_text.Contains("微信")
|
||||
dbProd.product_get_type_text.Contains("微信")
|
||||
? PlatformType.WX :
|
||||
PlatformType.None);
|
||||
|
||||
@@ -7641,6 +7687,15 @@ namespace TemuKJD.WXForms.ProductForms
|
||||
{
|
||||
RejectSevenDayReturn = chkRejectSevenDayReturn.Checked;
|
||||
}
|
||||
/// <summary>
|
||||
/// 刷新服务端配置
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void btnLoadConfig_Click(object sender, EventArgs e)
|
||||
{
|
||||
InitUserConfig();
|
||||
}
|
||||
}
|
||||
|
||||
public class WXUpload
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
using CefSharp.DevTools.IndexedDB;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Work;
|
||||
|
||||
/// <summary>
|
||||
/// 主账号云端配置
|
||||
/// </summary>
|
||||
public class UserConfig
|
||||
{
|
||||
public const string SensitiveWordsKey = "SensitiveWords";
|
||||
public const string UseOrderReturnWarehouseAddressKey = "UseOrderReturnWarehouseAddress";
|
||||
|
||||
public Dictionary<string, ConfigItem> Configs { get; set; } = [];
|
||||
public ConfigItem this[string key]
|
||||
{
|
||||
get => Configs.TryGetValue(key, out var item) ? item : null;
|
||||
}
|
||||
public bool TryGetConfig(string key, out ConfigItem item)
|
||||
{
|
||||
return Configs.TryGetValue(key, out item);
|
||||
}
|
||||
public enum InheritPolicy
|
||||
{
|
||||
/// <summary>
|
||||
/// 自由
|
||||
/// </summary>
|
||||
Free = 0,
|
||||
/// <summary>
|
||||
/// 锁定
|
||||
/// </summary>
|
||||
Locked = 1,
|
||||
/// <summary>
|
||||
/// 追加
|
||||
/// </summary>
|
||||
AppendOnly = 2
|
||||
}
|
||||
|
||||
|
||||
public class ConfigItem
|
||||
{
|
||||
public string Key { get; set; }
|
||||
public string Value { get; set; }
|
||||
public InheritPolicy Policy { get; set; } = InheritPolicy.Free;
|
||||
}
|
||||
|
||||
}
|
||||