GitBucket
4.6.0
Toggle navigation
Sign in
Files
Branches
1
Tags
Issues
Pull Requests
Labels
Milestones
Wiki
08335
/
hivui-platform-template
hivui平台项目模板
Browse code
Merge branch 'master' of http://192.168.4.105:8080/gitbucket/git/08335/hivui-platform-template
master
commit
2870f8ea6a366752dd65b36a8bbc293fcb9a3751
2 parents
22eda18
+
490c7e6
hhb
authored
on 14 Feb 2022
Showing
3 changed files
build/bin/oper.sh
project/hivuiMain/store/modules/app.js
project/hivuiMain/utils/index.js
Ignore Space
Show notes
View
build/bin/oper.sh
#!/bin/bash ## 权限问题,用 chmod u+x *.sh ## eg: oper.sh # 用户名 # 项目名 # 操作 (create , restart , start , kill , stop , del , build , sync) # 部署路径 (upload) # 同步内容 (node_modules , build , cli) cmdDir=$( cd $(dirname "$0") pwd ) username=$1 #用户名 projectName=$2 #项目名 cmd=$3 #命令 port=$4 #端口 # *.pre2.hieap.cn==>http://192.168.4.192:8001 # *.pre.hieap.cn==>http://192.168.10.242:31167 ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"` tagIp="192.168.4.193" if [[ $ip == *$tagIp* ]]; then DEV_BASE_API='http://192.168.4.106:7777/' #传给配置 .env.development 的 VITE_APP_BASE_API 做后端请求数据 else DEV_BASE_API='http://e52.hieap.cn/' #传给配置 .env.development 的 VITE_APP_BASE_API 做后端请求数据 fi tagIp192="192.168.4.192" nginxStr='' # map $http_upgrade $connection_upgrade { # default upgrade; # '' close; # } # server { # listen 8001; # location / { # proxy_pass http://192.168.4.192:36962; # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "upgrade"; # proxy_set_header X-real-ip $remote_addr; # proxy_set_header X-Forwarded-For $remote_addr; # proxy_set_header Origin ""; # } # } function getNginx(){ nginxStr='' location=' location / {\n\t\t' location=$location' proxy_pass http://127.0.0.1:'${1}';\n\t' location=$location' proxy_http_version 1.1;\n\t' location=$location' proxy_set_header Upgrade $http_upgrade;\n\t' location=$location' proxy_set_header Connection "upgrade";\n\t' location=$location' proxy_set_header X-real-ip $remote_addr;\n\t' location=$location' proxy_set_header X-Forwarded-For $remote_addr;\n\t' location=$location' proxy_set_header Origin "";\n\t' location=$location' index index.html index.htm;\n\t\t' location=$location' }\n' if [[ $ip == *$tagIp192* ]]; then # *.pre2.hieap.cn==>http://192.168.4.192:8001 nginxStr='\n\t\#start '${projectName}${username}'\n\t' nginxStr=$nginxStr'server {\n\t' nginxStr=$nginxStr' listen 8001;\n\t' nginxStr=$nginxStr' server_name '${projectName}'.'${username}'.pre2.hieap.cn;\n\t' nginxStr=${nginxStr}${location} nginxStr=$nginxStr' }\n\t' nginxStr=$nginxStr'\#end '${projectName}${username}'\n\n\n' elif [[ $ip == *$tagIp* ]]; then nginxStr='' else # *.pre.hieap.cn==>http://192.168.10.242:32467 nginxStr=$nginxStr'\n\t\#start '${projectName}${username}'\n\t' nginxStr=$nginxStr'server {\n\t' nginxStr=$nginxStr' listen 8001;\n\t' nginxStr=$nginxStr' server_name '${projectName}'.'${username}'.pre.hieap.cn;\n\t' nginxStr=${nginxStr}${location} nginxStr=$nginxStr' }\n\t' nginxStr=$nginxStr'\#end '${projectName}${username}'\n\n\n' fi } #BASH_SOURCE[0]用户所在的目录到脚本的路径 ## 获取eap5.0 路径 # eap5Dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" eap5Dir="${cmdDir%/hiruntime*}" projectPath=${eap5Dir}/desktop/preview tmpPath=${eap5Dir}/hiruntime/project/desktop/project-template source[0]='\t<% if(htmlWebpackPlugin.vite){%>\n\t<!--预览时 公共库-->' source[1]='\n\t<script src="\/'${projectName}'\/setting\/desktop\/development.js" type="text\/javascript"><\/script>' source[2]='\n\t<%}%>' source[3]='\n\t<% if(!htmlWebpackPlugin.vite){%>\n\t<!--发布时 公共库-->' source[4]='\n\t<script src="\/${serverName}\/render\/'${username}'\/'${projectName}'\/setting\/desktop\/appsetting.js" type="text\/javascript"><\/script>' source[5]='\n\t<%}%>\n' viteStr[0]='let socketHost = `${__HMR_HOSTNAME__ || location.hostname}:${__HMR_PORT__}`;' viteStr[1]='let socketHostSplit = socketHost.split(".");' viteStr[2]='if(isNaN(parseInt(socketHostSplit[0]))){socketHost = socketHost.substring(0,socketHost.indexOf(":"));}' nrm del zhc nrm add zhc http://npm.hieap.cn/ nrm use zhc case $cmd in "create") #创建 #参数个数判断,至少4个 if [ $# -lt 4 ];then echo "创建项目命令参数不对:$*" echo "创建项目命令正确参数:用户名 项目名 create 桌面预览端口" exit 1 fi # source ${cmdDir}/var_env.sh # echo ${DEV_BASE_API} echo eap5Dir: ${eap5Dir} echo projectPath: ${projectPath} if [ ! -d "${projectPath}/${username}" ];then mkdir "${projectPath}/${username}" #创用户工作空间 fi if [ -d "${projectPath}/${username}/${projectName}" ];then echo "项目名已经存在!" exit 1 fi echo "<1>git正在拉取web端项目基础文件" git clone http://192.168.4.105:8080/gitbucket/git/08335/hivui-platform-template.git "${projectPath}/${username}/${projectName}/deploy" echo "<2>初始化node环境..." cp -rf ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/node_modules cd ${projectPath}/${username}/${projectName}/deploy/ rm -rf ./build/bin rm -rf ./build/doc.txt echo "<3>初始化相关配置..." ## 修改模板,重命项目名 mv project ${projectName} sed -i 's#\(VITE_APP_USERPATH \?= \?\).*#\1'"/e5/render/${username}"'#g' .env.production sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_BASE_API \?= \?\).*#\1'"${DEV_BASE_API}"'#g' .env.development ## 替换 package.json 的 name 值 author值 ,打包时候输出静态地址是这个 sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json sed -i 's#\("author": \?"\).*#\1'"${username}"'",#g' package.json ## 替换 processes.json 的 args 值 sed -i '4s#\("name": \?"\).*#\1'"vite-${username}-${projectName}"'",#g' processes.json sed -i '7s#\("args": \?"\).*#\1'"--host --port ${port}"'",#g' processes.json cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiLogin sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiMain sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiBirt sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/setting/desktop/appsetting/js/1.0.0 sed -i 's#\(projectName \?= \?\).*#\1"'"${projectName}"'";#g' appsetting.js echo "<4>配置Nginx环境" getNginx $port # /usr/local/nginx/conf/nginx.conf cd /usr/local/nginx/conf #删除原来有的配置 sed -i '/\#start '${projectName}${username}'/,/\#end '${projectName}${username}'/d' nginx.conf sed -i "s#http.*{#http {${nginxStr}#g" nginx.conf cd /usr/local/nginx/sbin # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload echo "<5>配置node_modules/vite环境" # node_modules/vite 环境 cd ${projectPath}/${username}/${projectName}/deploy/node_modules/vite/dist/client sed -i "s#const.*socketHost.*=.*#${viteStr[*]}#g" client.js sed -i "s#case 'update':.*#case 'update':return;#g" client.js sed -i "s#case.*'full-reload':.*#case 'full-reload':return;#g" client.js echo "<6>正在启动服务..." cd ${projectPath}/${username}/${projectName}/deploy/ npm run pm2:start pm2 save exit 1 ;; "delete") #删除 #参数个数判断,至少3个 if [ $# -lt 3 ];then echo "删除项目命令参数不对:$*" echo "删除项目命令正确参数:用户名 项目名 delete" exit 1 fi if [ $username = "admin" -a $projectName = "systpl" ] ; then echo "系统模板,不可删除!" exit 1 fi curPid=`pm2 pid vite-${username}-${projectName}` if [ ! -z "$curPid" ];then echo "vite-${username}-${projectName} 正在关闭服务..." pm2 delete "vite-${username}-${projectName}" fi ### 删除用户项目 rm -rf ${projectPath}/${username}/${projectName} echo "用户:${username} 项目:${projectName} 删除成功!" pm2 save exit 1 ;; "restart") #重启 echo "》》》正在重启服务..." curPid=`pm2 pid vite-${username}-${projectName}` if [ ! -z "$curPid" ];then echo "vite-${username}-${projectName} 正在关闭服务..." pm2 delete "vite-${username}-${projectName}" fi cd ${projectPath}/${username}/${projectName}/deploy/ npm run rm:vite npm run pm2:start pm2 save echo "已经重启服务!!" exit 1 ;; "build") #编译 uploadPath=$4 modules=$5 #参数个数判断,至少3个 # if [ $# -lt 4 ];then # echo "编译项目命令参数不对:$*" # echo "编译项目命令正确参数:用户名 项目名 build 上传服务器路径 [指定编译模块]" # exit 1 # fi ### 用pm2管理,用pm2 重启指定的 cd "${projectPath}/${username}/${projectName}/deploy" npm run build $modules #yarn run pm2:stop vite-${username}-${projectName} cd "${projectPath}/${username}/${projectName}/deploy/" if [[ ! -d "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/desklib" ]]; then mkdir -p "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/desklib" fi cp -rf "${projectPath}/${username}/${projectName}/deploy/yslz/funclib/desklib" "${projectPath}/${username}/${projectName}/deploy/dist/yslz/funclib/" ## 删除之前打包文件 rm -rf "${username}_${projectName}_dist.zip" cd "${projectPath}/${username}/${projectName}/deploy/dist" mkdir -p "${projectPath}/${username}/${projectName}/deploy/dist/${username}/${projectName}" cp -rf "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}" "${projectPath}/${username}/${projectName}/deploy/dist/${username}/" # rm -rf "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}" zip -q -r "${username}_${projectName}_dist.zip" ./* cp -rf "${projectPath}/${username}/${projectName}/deploy/dist/${username}_${projectName}.zip" "${projectPath}/${username}/${projectName}/deploy/dist_zip/" rm -rf "${projectPath}/${username}/${projectName}/deploy/dist/${username}_${projectName}.zip" cd ${projectPath}/${username}/${projectName}/deploy/ if [ -z "$uploadPath" ]; then echo '未传服务器路径,请自行拷贝!' exit 1; fi if [[ ! -d "$uploadPath" ]]; then echo "编译命令: 上传文件夹不存在, 正在帮您创建目录..." mkdir -p "${uploadPath}" fi echo "正在拷到服务器目录:${uploadPath}" # cp -f "${username}_${projectName}_dist.zip" "${uploadPath}" cp -fv "${username}_${projectName}_dist.zip" "${uploadPath}" echo "(‐^▽^‐) 编译打包成功!" ;; "sync") #同步环境 #参数个数判断,至少4个 if [ $# -lt 4 ];then echo "同步项目命令参数不对:$*" echo "同步项目命令正确参数:用户名 项目名 sync 同步方式" exit 1 fi way=$4 if [ $way = 'sysfunc' ];then #同步系统功能 echo "》》》同步系统功能..." git clone http://192.168.4.105:8080/gitbucket/git/js-team2/zhc-birt-platf.git ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf rm -rf ${eap5Dir}/hiruntime/project/desktop/zhc-birt-platf cp -rf ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf/project/* ${eap5Dir}/hiruntime/workspace/${username}/${projectName}/ rm -rf ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf echo "》》》系统功能已同步!" exit fi if [ $way = 'nginx' ];then #nginx环境 #获取端口 portStr=$(cat ${projectPath}/${username}/${projectName}/deploy/processes.json | sed 's/,/\n/g' | grep "args" | sed 's/:/\n/g' | sed '1d' | sed 's/"//g') portNum=`echo $portStr | tr -cd "[0-9]"` # echo $portNum if [ $portNum = '' ];then echo '取不到端口信息!' exit 1; fi cd /usr/local/nginx/conf #删除原来有的配置 sed -i '/\#start '${projectName}${username}'/,/\#end '${projectName}${username}'/d' nginx.conf #设置相关配置 返回到nginxStr getNginx $portNum #写入配置文件 sed -i "s#http.*{#http {${nginxStr}#g" nginx.conf cd /usr/local/nginx/sbin # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload echo "》》》nginx环境已同步!" exit fi git clone http://192.168.4.105:8080/gitbucket/git/08335/hivui-platform-template.git ${eap5Dir}/hiruntime/project/desktop/__gittmp ## rsync ${eap5Dir}/hiruntime/project/desktop/__gittmp ${tmpPath} rm -rf ${eap5Dir}/hiruntime/project/desktop/project-template cp -rf ${eap5Dir}/hiruntime/project/desktop/__gittmp ${eap5Dir}/hiruntime/project/desktop/project-template rm -rf ${eap5Dir}/hiruntime/project/desktop/__gittmp case $way in "build") #同步打包环境 echo "》》》正在同步打包环境..." rsync -auz ${tmpPath}/build ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/babel.config.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.postcssrc.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.browserslistrc ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/vite-plugin ${projectPath}/${username}/${projectName}/deploy/ echo "》》》打包环境已同步!" exit 1 ;; "hiui") #同步hiui资源库 echo "》》》正在同步hi-ui库..." cd "${tmpPath}/" npm i hi-ui -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui rsync -auz ${tmpPath}/node_modules/hi-ui ${projectPath}/${username}/${projectName}/deploy/node_modules/ ## 取hi-ui版本 并更新root package.json ## cd ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui/ ## sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json echo "hiui已同步!" ;; "taskcenter") #同步环境 echo "》》》正在同步任务中心..." cd "${tmpPath}/" npm i hi-taskcenter -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-taskcenter rsync -auz ${tmpPath}/node_modules/hi-taskcenter ${projectPath}/${username}/${projectName}/deploy/node_modules/ ## 取hi-taskcenter版本 并更新root package.json ## cd ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-taskcenter/ ## sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json echo "任务中心已同步!" ;; "cli") #程序环境 rsync -auz ${tmpPath}/assets_platform ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/index.html ${projectPath}/${username}/${projectName}/deploy rsync -auz ${tmpPath}/template.html ${projectPath}/${username}/${projectName}/deploy/ echo "》》》静态共用库已同步!" rsync -auz ${tmpPath}/project/hivuiLogin ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiLogin sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html echo "》》》登录模板已同步!" rsync -auz ${tmpPath}/project/hivuiMain ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiMain sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html echo "》》》主页模板已同步!" rsync -auz ${tmpPath}/project/hivuiBirt ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiBirt sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html echo "》》》报表模板同步!" cd "${tmpPath}/" npm i rsync -auz ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/ echo "》》》node环境已同步!" cd "${tmpPath}/" npm i hi-ui -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui rsync -auz ${tmpPath}/node_modules/hi-ui ${projectPath}/${username}/${projectName}/deploy/node_modules/ echo "》》》hi-ui库已同步!" rsync -auz ${tmpPath}/build ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/babel.config.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.postcssrc.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.browserslistrc ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/vite-plugin ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.env.development ${projectPath}/${username}/${projectName}/deploy/.env.development rsync -auz ${tmpPath}/.env.production ${projectPath}/${username}/${projectName}/deploy/.env.production rsync -auz ${tmpPath}/.env.staging ${projectPath}/${username}/${projectName}/deploy/.env.staging rsync -auz ${tmpPath}/vite.config.js ${projectPath}/${username}/${projectName}/deploy/vite.config.js echo "》》》已同步程序环境(build、babel.config.js、.postcssrc.js、.browserslistrc、vite-plugin、.env.development、.env.production、.env.staging、vite.config.js)..." # source ${cmdDir}/var_env.sh ### 设置环境变量 sed -i 's#\(VITE_APP_USERPATH \?= \?\).*#\1'"/e5/render/${username}"'#g' .env.production sed -i 's#\(VITE_APP_BASE_API \?= \?\).*#\1'"${DEV_BASE_API}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.staging ### node_modules/vite 环境 cd ${projectPath}/${username}/${projectName}/deploy/node_modules/vite/dist/client # sed 's/要替换的内容/新的内容/' # 将所有的数字替换成内容 # sed 's/[0-9]/好的/g' testFile2.txt sed -i "s#const.*socketHost.*=.*#${viteStr[*]}#g" client.js sed -i "s#case 'update':.*#case 'update':return;#g" client.js sed -i "s#case.*'full-reload':.*#case 'full-reload':return;#g" client.js echo "》》》程序环境已同步!" ;; esac rsync -auz ${tmpPath}/package.json ${projectPath}/${username}/${projectName}/deploy/package.json cd ${projectPath}/${username}/${projectName}/deploy/ ## 替换 package.json 的 name 值 sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json sed -i 's#\("author": \?"\).*#\1'"${username}"'",#g' package.json echo "》》》正在重启服务..." pm2 stop "vite-${username}-${projectName}" pm2 delete "vite-${username}-${projectName}" npm run rm:vite npm run pm2:start pm2 save echo "》》》已经重启服务!!" ;; esac
#!/bin/bash ## 权限问题,用 chmod u+x *.sh ## eg: oper.sh # 用户名 # 项目名 # 操作 (create , restart , start , kill , stop , del , build , sync) # 部署路径 (upload) # 同步内容 (node_modules , build , cli) cmdDir=$( cd $(dirname "$0") pwd ) username=$1 #用户名 projectName=$2 #项目名 cmd=$3 #命令 port=$4 #端口 # *.pre2.hieap.cn==>http://192.168.4.192:8001 # *.pre.hieap.cn==>http://192.168.10.242:31167 ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"` tagIp="192.168.4.193" if [[ $ip == *$tagIp* ]]; then DEV_BASE_API='http://192.168.4.106:7777/' #传给配置 .env.development 的 VITE_APP_BASE_API 做后端请求数据 else DEV_BASE_API='http://e52.hieap.cn/' #传给配置 .env.development 的 VITE_APP_BASE_API 做后端请求数据 fi tagIp192="192.168.4.192" nginxStr='' # map $http_upgrade $connection_upgrade { # default upgrade; # '' close; # } # server { # listen 8001; # location / { # proxy_pass http://192.168.4.192:36962; # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "upgrade"; # proxy_set_header X-real-ip $remote_addr; # proxy_set_header X-Forwarded-For $remote_addr; # proxy_set_header Origin ""; # } # } function getNginx(){ nginxStr='' location=' location / {\n\t\t' location=$location' proxy_pass http://127.0.0.1:'${1}';\n\t' location=$location' proxy_http_version 1.1;\n\t' location=$location' proxy_set_header Upgrade $http_upgrade;\n\t' location=$location' proxy_set_header Connection "upgrade";\n\t' location=$location' proxy_set_header X-real-ip $remote_addr;\n\t' location=$location' proxy_set_header X-Forwarded-For $remote_addr;\n\t' location=$location' proxy_set_header Origin "";\n\t' location=$location' index index.html index.htm;\n\t\t' location=$location' }\n' if [[ $ip == *$tagIp192* ]]; then # *.pre2.hieap.cn==>http://192.168.4.192:8001 nginxStr='\n\t\#start '${projectName}${username}'\n\t' nginxStr=$nginxStr'server {\n\t' nginxStr=$nginxStr' listen 8001;\n\t' nginxStr=$nginxStr' server_name '${projectName}'.'${username}'.pre2.hieap.cn;\n\t' nginxStr=${nginxStr}${location} nginxStr=$nginxStr' }\n\t' nginxStr=$nginxStr'\#end '${projectName}${username}'\n\n\n' elif [[ $ip == *$tagIp* ]]; then nginxStr='' else # *.pre.hieap.cn==>http://192.168.10.242:32467 nginxStr=$nginxStr'\n\t\#start '${projectName}${username}'\n\t' nginxStr=$nginxStr'server {\n\t' nginxStr=$nginxStr' listen 8001;\n\t' nginxStr=$nginxStr' server_name '${projectName}'.'${username}'.pre.hieap.cn;\n\t' nginxStr=${nginxStr}${location} nginxStr=$nginxStr' }\n\t' nginxStr=$nginxStr'\#end '${projectName}${username}'\n\n\n' fi } #BASH_SOURCE[0]用户所在的目录到脚本的路径 ## 获取eap5.0 路径 # eap5Dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" eap5Dir="${cmdDir%/hiruntime*}" projectPath=${eap5Dir}/desktop/preview tmpPath=${eap5Dir}/hiruntime/project/desktop/project-template source[0]='\t<% if(htmlWebpackPlugin.vite){%>\n\t<!--预览时 公共库-->' source[1]='\n\t<script src="\/'${projectName}'\/setting\/desktop\/development.js" type="text\/javascript"><\/script>' source[2]='\n\t<%}%>' source[3]='\n\t<% if(!htmlWebpackPlugin.vite){%>\n\t<!--发布时 公共库-->' source[4]='\n\t<script src="\/${serverName}\/render\/'${username}'\/'${projectName}'\/setting\/desktop\/appsetting.js" type="text\/javascript"><\/script>' source[5]='\n\t<%}%>\n' viteStr[0]='let socketHost = `${__HMR_HOSTNAME__ || location.hostname}:${__HMR_PORT__}`;' viteStr[1]='let socketHostSplit = socketHost.split(".");' viteStr[2]='if(isNaN(parseInt(socketHostSplit[0]))){socketHost = socketHost.substring(0,socketHost.indexOf(":"));}' nrm del zhc nrm add zhc http://npm.hieap.cn/ nrm use zhc case $cmd in "create") #创建 #参数个数判断,至少4个 if [ $# -lt 4 ];then echo "创建项目命令参数不对:$*" echo "创建项目命令正确参数:用户名 项目名 create 桌面预览端口" exit 1 fi # source ${cmdDir}/var_env.sh # echo ${DEV_BASE_API} echo eap5Dir: ${eap5Dir} echo projectPath: ${projectPath} if [ ! -d "${projectPath}/${username}" ];then mkdir "${projectPath}/${username}" #创用户工作空间 fi if [ -d "${projectPath}/${username}/${projectName}" ];then echo "项目名已经存在!" exit 1 fi echo "<1>git正在拉取web端项目基础文件" git clone http://192.168.4.105:8080/gitbucket/git/08335/hivui-platform-template.git "${projectPath}/${username}/${projectName}/deploy" echo "<2>初始化node环境..." cp -rf ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/node_modules cd ${projectPath}/${username}/${projectName}/deploy/ rm -rf ./build/bin rm -rf ./build/doc.txt echo "<3>初始化相关配置..." ## 修改模板,重命项目名 mv project ${projectName} sed -i 's#\(VITE_APP_USERPATH \?= \?\).*#\1'"/e5/render/${username}"'#g' .env.production sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_BASE_API \?= \?\).*#\1'"${DEV_BASE_API}"'#g' .env.development ## 替换 package.json 的 name 值 author值 ,打包时候输出静态地址是这个 sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json sed -i 's#\("author": \?"\).*#\1'"${username}"'",#g' package.json ## 替换 processes.json 的 args 值 sed -i '4s#\("name": \?"\).*#\1'"vite-${username}-${projectName}"'",#g' processes.json sed -i '7s#\("args": \?"\).*#\1'"--host --port ${port}"'",#g' processes.json cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiLogin sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiMain sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiBirt sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/setting/desktop/appsetting/js/1.0.0 sed -i 's#\(projectName \?= \?\).*#\1"'"${projectName}"'";#g' appsetting.js echo "<4>配置Nginx环境" getNginx $port # /usr/local/nginx/conf/nginx.conf cd /usr/local/nginx/conf #删除原来有的配置 sed -i '/\#start '${projectName}${username}'/,/\#end '${projectName}${username}'/d' nginx.conf sed -i "s#http.*{#http {${nginxStr}#g" nginx.conf cd /usr/local/nginx/sbin # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload echo "<5>配置node_modules/vite环境" # node_modules/vite 环境 cd ${projectPath}/${username}/${projectName}/deploy/node_modules/vite/dist/client sed -i "s#const.*socketHost.*=.*#${viteStr[*]}#g" client.js sed -i "s#case 'update':.*#case 'update':return;#g" client.js sed -i "s#case.*'full-reload':.*#case 'full-reload':return;#g" client.js echo "<6>正在启动服务..." cd ${projectPath}/${username}/${projectName}/deploy/ npm run pm2:start pm2 save exit 1 ;; "delete") #删除 #参数个数判断,至少3个 if [ $# -lt 3 ];then echo "删除项目命令参数不对:$*" echo "删除项目命令正确参数:用户名 项目名 delete" exit 1 fi if [ $username = "admin" -a $projectName = "systpl" ] ; then echo "系统模板,不可删除!" exit 1 fi curPid=`pm2 pid vite-${username}-${projectName}` if [ ! -z "$curPid" ];then echo "vite-${username}-${projectName} 正在关闭服务..." pm2 delete "vite-${username}-${projectName}" fi ### 删除用户项目 rm -rf ${projectPath}/${username}/${projectName} echo "用户:${username} 项目:${projectName} 删除成功!" pm2 save exit 1 ;; "restart") #重启 echo "》》》正在重启服务..." curPid=`pm2 pid vite-${username}-${projectName}` if [ ! -z "$curPid" ];then echo "vite-${username}-${projectName} 正在关闭服务..." pm2 delete "vite-${username}-${projectName}" fi cd ${projectPath}/${username}/${projectName}/deploy/ npm run rm:vite npm run pm2:start pm2 save echo "已经重启服务!!" exit 1 ;; "build") #编译 uploadPath=$4 modules=$5 #参数个数判断,至少3个 # if [ $# -lt 4 ];then # echo "编译项目命令参数不对:$*" # echo "编译项目命令正确参数:用户名 项目名 build 上传服务器路径 [指定编译模块]" # exit 1 # fi ### 用pm2管理,用pm2 重启指定的 cd "${projectPath}/${username}/${projectName}/deploy" npm run build $modules #yarn run pm2:stop vite-${username}-${projectName} cd "${projectPath}/${username}/${projectName}/deploy/" if [[ ! -d "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/desklib" ]]; then mkdir -p "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/desklib" fi cp -rf "${projectPath}/${username}/${projectName}/deploy/yslz/funclib/desklib" "${projectPath}/${username}/${projectName}/deploy/dist/yslz/funclib/" ## 删除之前打包文件 rm -rf "${username}_${projectName}_dist.zip" cd "${projectPath}/${username}/${projectName}/deploy/dist" mkdir -p "${projectPath}/${username}/${projectName}/deploy/dist/${username}/${projectName}" cp -rf "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}" "${projectPath}/${username}/${projectName}/deploy/dist/${username}/" rm -rf "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}" zip -q -r "${username}_${projectName}_dist.zip" ./* cp -rf "${projectPath}/${username}/${projectName}/deploy/dist/${username}_${projectName}_dist.zip" "${projectPath}/${username}/${projectName}/deploy/" cd ${projectPath}/${username}/${projectName}/deploy/ if [ -z "$uploadPath" ]; then echo '未传服务器路径,请自行拷贝!' exit 1; fi if [[ ! -d "$uploadPath" ]]; then echo "编译命令: 上传文件夹不存在, 正在帮您创建目录..." mkdir -p "${uploadPath}" fi echo "正在拷到服务器目录:${uploadPath}" # cp -f "${username}_${projectName}_dist.zip" "${uploadPath}" cp -fv "${username}_${projectName}_dist.zip" "${uploadPath}" echo "(‐^▽^‐) 编译打包成功!" ;; "sync") #同步环境 #参数个数判断,至少4个 if [ $# -lt 4 ];then echo "同步项目命令参数不对:$*" echo "同步项目命令正确参数:用户名 项目名 sync 同步方式" exit 1 fi way=$4 if [ $way = 'sysfunc' ];then #同步系统功能 echo "》》》同步系统功能..." git clone http://192.168.4.105:8080/gitbucket/git/js-team2/zhc-birt-platf.git ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf rm -rf ${eap5Dir}/hiruntime/project/desktop/zhc-birt-platf cp -rf ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf/project/* ${eap5Dir}/hiruntime/workspace/${username}/${projectName}/ rm -rf ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf echo "》》》系统功能已同步!" exit fi if [ $way = 'nginx' ];then #nginx环境 #获取端口 portStr=$(cat ${projectPath}/${username}/${projectName}/deploy/processes.json | sed 's/,/\n/g' | grep "args" | sed 's/:/\n/g' | sed '1d' | sed 's/"//g') portNum=`echo $portStr | tr -cd "[0-9]"` # echo $portNum if [ $portNum = '' ];then echo '取不到端口信息!' exit 1; fi cd /usr/local/nginx/conf #删除原来有的配置 sed -i '/\#start '${projectName}${username}'/,/\#end '${projectName}${username}'/d' nginx.conf #设置相关配置 返回到nginxStr getNginx $portNum #写入配置文件 sed -i "s#http.*{#http {${nginxStr}#g" nginx.conf cd /usr/local/nginx/sbin # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload echo "》》》nginx环境已同步!" exit fi git clone http://192.168.4.105:8080/gitbucket/git/08335/hivui-platform-template.git ${eap5Dir}/hiruntime/project/desktop/__gittmp ## rsync ${eap5Dir}/hiruntime/project/desktop/__gittmp ${tmpPath} rm -rf ${eap5Dir}/hiruntime/project/desktop/project-template cp -rf ${eap5Dir}/hiruntime/project/desktop/__gittmp ${eap5Dir}/hiruntime/project/desktop/project-template rm -rf ${eap5Dir}/hiruntime/project/desktop/__gittmp case $way in "build") #同步打包环境 echo "》》》正在同步打包环境..." rsync -auz ${tmpPath}/build ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/babel.config.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.postcssrc.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.browserslistrc ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/vite-plugin ${projectPath}/${username}/${projectName}/deploy/ echo "》》》打包环境已同步!" exit 1 ;; "hiui") #同步hiui资源库 echo "》》》正在同步hi-ui库..." cd "${tmpPath}/" npm i hi-ui -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui rsync -auz ${tmpPath}/node_modules/hi-ui ${projectPath}/${username}/${projectName}/deploy/node_modules/ ## 取hi-ui版本 并更新root package.json ## cd ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui/ ## sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json echo "hiui已同步!" ;; "taskcenter") #同步环境 echo "》》》正在同步任务中心..." cd "${tmpPath}/" npm i hi-taskcenter -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-taskcenter rsync -auz ${tmpPath}/node_modules/hi-taskcenter ${projectPath}/${username}/${projectName}/deploy/node_modules/ ## 取hi-taskcenter版本 并更新root package.json ## cd ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-taskcenter/ ## sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json echo "任务中心已同步!" ;; "cli") #程序环境 rsync -auz ${tmpPath}/assets_platform ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/index.html ${projectPath}/${username}/${projectName}/deploy rsync -auz ${tmpPath}/template.html ${projectPath}/${username}/${projectName}/deploy/ echo "》》》静态共用库已同步!" rsync -auz ${tmpPath}/project/hivuiLogin ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiLogin sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html echo "》》》登录模板已同步!" rsync -auz ${tmpPath}/project/hivuiMain ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiMain sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html echo "》》》主页模板已同步!" rsync -auz ${tmpPath}/project/hivuiBirt ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiBirt sed -i 's/<\/head>/'"${source[*]}"'<\/head>/g' index.html echo "》》》报表模板同步!" cd "${tmpPath}/" npm i rsync -auz ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/ echo "》》》node环境已同步!" cd "${tmpPath}/" npm i hi-ui -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui rsync -auz ${tmpPath}/node_modules/hi-ui ${projectPath}/${username}/${projectName}/deploy/node_modules/ echo "》》》hi-ui库已同步!" rsync -auz ${tmpPath}/build ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/babel.config.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.postcssrc.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.browserslistrc ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/vite-plugin ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.env.development ${projectPath}/${username}/${projectName}/deploy/.env.development rsync -auz ${tmpPath}/.env.production ${projectPath}/${username}/${projectName}/deploy/.env.production rsync -auz ${tmpPath}/.env.staging ${projectPath}/${username}/${projectName}/deploy/.env.staging rsync -auz ${tmpPath}/vite.config.js ${projectPath}/${username}/${projectName}/deploy/vite.config.js echo "》》》已同步程序环境(build、babel.config.js、.postcssrc.js、.browserslistrc、vite-plugin、.env.development、.env.production、.env.staging、vite.config.js)..." # source ${cmdDir}/var_env.sh ### 设置环境变量 sed -i 's#\(VITE_APP_USERPATH \?= \?\).*#\1'"/e5/render/${username}"'#g' .env.production sed -i 's#\(VITE_APP_BASE_API \?= \?\).*#\1'"${DEV_BASE_API}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.staging ### node_modules/vite 环境 cd ${projectPath}/${username}/${projectName}/deploy/node_modules/vite/dist/client # sed 's/要替换的内容/新的内容/' # 将所有的数字替换成内容 # sed 's/[0-9]/好的/g' testFile2.txt sed -i "s#const.*socketHost.*=.*#${viteStr[*]}#g" client.js sed -i "s#case 'update':.*#case 'update':return;#g" client.js sed -i "s#case.*'full-reload':.*#case 'full-reload':return;#g" client.js echo "》》》程序环境已同步!" ;; esac rsync -auz ${tmpPath}/package.json ${projectPath}/${username}/${projectName}/deploy/package.json cd ${projectPath}/${username}/${projectName}/deploy/ ## 替换 package.json 的 name 值 sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json sed -i 's#\("author": \?"\).*#\1'"${username}"'",#g' package.json echo "》》》正在重启服务..." pm2 stop "vite-${username}-${projectName}" pm2 delete "vite-${username}-${projectName}" npm run rm:vite npm run pm2:start pm2 save echo "》》》已经重启服务!!" ;; esac
Ignore Space
Show notes
View
project/hivuiMain/store/modules/app.js
import { getMenus, getQuickNav,getLeastRecentlyUsed,getPermissions } from '../../api/menu' import {turnMenuTree,field5Change3} from '@main/utils/index' const portal = { namespaced: true, state: { powerList:[], menusList:[], menus:[], defTabs: [], navs: [], latelyNavs:[], config:[], }, mutations: { SET_powerList: (state, powerList) => { state.powerList = powerList }, SET_menusList: (state, menusList) => { state.menusList = menusList }, SET_menus: (state, menus) => { state.menus = menus }, SET_defTabs: (state, data) => { state.defTabs = data }, SET_navs: (state, navs) => { state.navs = navs }, SET_latelyNavs: (state, latelyNavs) => { state.latelyNavs = latelyNavs }, SET_config: (state, config) => { state.config = config }, }, actions: { //取功能菜单 async getMenus({ commit, state }) { await getMenus().then(res => { if(res.status==500){ if(window.HIVUI_SETTING.loginUrl){ location=window.HIVUI_SETTING.loginUrl; }else{ location="/"+projectName+"/hivuiLogin/index.html#/"; } } const data = res.dataPack; commit('SET_menusList', [...data]); console.log(`SET_menusList:`,[...data]); let treeData=[...data],defTabs=[]; treeData=turnMenuTree(field5Change3([...treeData])); getActiveItem(treeData); /*获取默认打开项*/ function getActiveItem(_arr){ _arr.map(item=>{ //构建 树 map if(item.children&&item.children.length>0){ getActiveItem(item.children); } for(let i = (state.defTabs||[]).length-1;i>=0;i--){ if(state.defTabs[i].resId!=item.resId){ defTabs.push(item); break; } } }); } commit('SET_defTabs', [...defTabs,...state.defTabs]); console.info('menusTree:',[...treeData]); commit('SET_menus', treeData); return data; }); }, //取左侧快速 async getQuickNav({ commit, state }) { await getQuickNav().then(res => { const data = res.data.dataPack.rows; console.log(`getQuickNav`) let defTabs=[],flag=false; data.map(item=>{ flag=false; for(let i = state.defTabs.length-1;i>=0;i--){ if(state.defTabs[i].resId==item.resId){ flag = true; break; } } if(item.isActive&&!flag) defTabs.push(item); }); commit('SET_defTabs', [...defTabs,...state.defTabs]); commit('SET_navs', data); return data; }); }, setQuickNav({ commit, state },data){ commit('SET_navs', data); }, //最近使用 async getLatelyUse({ commit, state }){ let me =this; await getLeastRecentlyUsed(me.state.user.id).then(res => { let data = res.dataPack; data=field5Change3([...data]); commit('SET_latelyNavs', data); return data; }); }, //取功能权限 async getPowers({ commit, state }) { await getPermissions(this.state.user.id).then(res => { const data = res.data.dataPack.rows; commit('SET_powerList', [...data]); }); }, getSysConfig({ commit, state }){ commit('SET_config', window.__sysConfig); } } } export default portal
import { getMenus, getQuickNav,getLeastRecentlyUsed,getPermissions } from '../../api/menu' import {turnMenuTree,field5Change3} from '@main/utils/index' const portal = { namespaced: true, state: { powerList:[], menusList:[], menus:[], defTabs: [], navs: [], latelyNavs:[], config:[], }, mutations: { SET_powerList: (state, powerList) => { state.powerList = powerList }, SET_menusList: (state, menusList) => { state.menusList = menusList }, SET_menus: (state, menus) => { state.menus = menus }, SET_defTabs: (state, data) => { state.defTabs = data }, SET_navs: (state, navs) => { state.navs = navs }, SET_latelyNavs: (state, latelyNavs) => { state.latelyNavs = latelyNavs }, SET_config: (state, config) => { state.config = config }, }, actions: { //取功能菜单 async getMenus({ commit, state }) { await getMenus().then(res => { if(res.status==500){ if(window.HIVUI_SETTING.loginUrl){ location=window.HIVUI_SETTING.loginUrl; }else{ location="/"+projectName+"/hivuiLogin/index.html#/"; } } const data = res.dataPack; commit('SET_menusList', [...data]); console.log(`SET_menusList:`,data); let treeData=[...data],defTabs=[]; treeData=turnMenuTree(field5Change3([...treeData])); getActiveItem(treeData); /*获取默认打开项*/ function getActiveItem(_arr){ _arr.map(item=>{ //构建 树 map if(item.children&&item.children.length>0){ getActiveItem(item.children); } for(let i = (state.defTabs||[]).length-1;i>=0;i--){ if(state.defTabs[i].resId!=item.resId){ defTabs.push(item); break; } } }); } commit('SET_defTabs', [...defTabs,...state.defTabs]); console.info('menusTree:',treeData); commit('SET_menus', treeData); return data; }); }, //取左侧快速 async getQuickNav({ commit, state }) { await getQuickNav().then(res => { const data = res.data.dataPack.rows; console.log(`getQuickNav`) let defTabs=[],flag=false; data.map(item=>{ flag=false; for(let i = state.defTabs.length-1;i>=0;i--){ if(state.defTabs[i].resId==item.resId){ flag = true; break; } } if(item.isActive&&!flag) defTabs.push(item); }); commit('SET_defTabs', [...defTabs,...state.defTabs]); commit('SET_navs', data); return data; }); }, setQuickNav({ commit, state },data){ commit('SET_navs', data); }, //最近使用 async getLatelyUse({ commit, state }){ let me =this; await getLeastRecentlyUsed(me.state.user.id).then(res => { let data = res.dataPack; data=field5Change3([...data]); commit('SET_latelyNavs', data); return data; }); }, //取功能权限 async getPowers({ commit, state }) { await getPermissions(this.state.user.id).then(res => { const data = res.data.dataPack.rows; commit('SET_powerList', [...data]); }); }, getSysConfig({ commit, state }){ commit('SET_config', window.__sysConfig); } } } export default portal
Ignore Space
Show notes
View
project/hivuiMain/utils/index.js
import getScroll from './getScroll' export function getTargetRect(target) { return target !== window ? target.getBoundingClientRect() : { top: 0, left: 0, bottom: 0 }; } export function getOffset(element, target) { const elemRect = element.getBoundingClientRect(); const targetRect = getTargetRect(target); const scrollTop = getScroll(target, true); const scrollLeft = getScroll(target, false); const docElem = window.document.body; const clientTop = docElem.clientTop || 0; const clientLeft = docElem.clientLeft || 0; return { top: elemRect.top - targetRect.top + scrollTop - clientTop, left: elemRect.left - targetRect.left + scrollLeft - clientLeft, width: elemRect.width, height: elemRect.height, }; } export function getDefaultTarget() { return typeof window !== 'undefined' ? window : null; } /** * @method setUrlValue * @description 设置地址栏参数值 * @param url * @param pName * @param pValue * * @example: urlAppend("http://www.fdauto.com","userid=03870");�����http://www.fdauto.com?userid=03870;1` * urlAppend("http://www.fdauto.com?userid=03870","bumen=aj")�����http://www.fdauto.com?userid=03870&bumen=aj; */ export function setUrlValue(url, key, value) { var returnUrl = '' if (url.indexOf('?') == -1) { returnUrl += url + '?' + key + '=' + value } else { if (url.indexOf('?' + key + '=') == -1 && url.indexOf('&' + key + '=') == -1) { returnUrl += url + '&' + key + '=' + value } else { var isDone = false var startIndex = 0 var endIndex = url.length - 1 var parm = '?' + key + '=' for (var i = 0; i < url.length; i++) { if (url.substr(i, parm.length) == parm) { startIndex = i + parm.length for (var j = startIndex; j < url.length; j++) { if (url[j] == '&') { endIndex = j break } else if (j == url.length - 1) { endIndex = url.length } } isDone = true break } } if (!isDone) { parm = '&' + key + '=' for (var i = 0; i < url.length; i++) { if (url.substr(i, parm.length) == parm) { startIndex = i + parm.length for (var j = startIndex; j < url.length; j++) { if (url[j] == '&') { endIndex = j break } else if (j == url.length - 1) { endIndex = url.length } } break } } } var parmKeyValue = parm + url.substring(startIndex, endIndex) returnUrl = url.replace(parmKeyValue, parm + value) } } return returnUrl } /** * @method getUrlValue * @description 获取地址栏参数值 * @param name * string * @param url * string * @example: getUrlValue("p","http://www.baidu.com?p=5"); */ export function getUrlValue(url, name) { var str = url || window.location.search; if (str.indexOf("&" + name) != -1 || str.indexOf("?" + name) != -1) { var pos_start = "" if (str.indexOf("?" + name) > -1) pos_start = str.indexOf("?" + name) + name.length + 2; else pos_start = str.indexOf("&" + name) + name.length + 2; var pos_end = str.indexOf("&", pos_start); if (pos_end == -1) { return str.substring(pos_start); } else { return str.substring(pos_start, pos_end) } } else { return ""; } } export function getUrlSearch(url) { var name, value; var str = url; //取得整个地址栏 var num = str.indexOf("?") str = str.substr(num + 1); //取得所有参数 stringvar.substr(start [, length ] var arr = str.split("&"); //各个参数放到数组里 var search ={}; for (var i = 0; i < arr.length; i++) { num = arr[i].indexOf("="); if (num > 0) { name = arr[i].substring(0, num); value = arr[i].substr(num + 1); search[name] = value; } } return search; } /** * var str='这是一个测试的字符串:{0} {1}'.format('Hello','world'); * var str='这是一个测试的字符串:{str0} {str1}'.format({str0:'Hello',str1:'world'}); */ export function strFormat(str, args) { var result = str; if (arguments.length > 0) { if (arguments.length == 2 && typeof (args) == "object") { for (var key in args) { if (args[key] != undefined) { var reg = new RegExp("({" + key + "})", "g"); result = result.replace(reg, args[key]); } } } else { for (var i = 1; i < arguments.length; i++) { if (arguments[i] != undefined) { var reg = new RegExp("({)" + (i - 1) + "(})", "g"); result = result.replace(reg, arguments[i]); } } } } return result; } export function closeWindow(errorUrl){ if (document.all) { if (window.location.pathname == window.parent.location.pathname) { window.opener = null; window.open('', '_top'); window.top.close(); } } else { window.close(); } window.location.href = errorUrl || "about:blank"; } /*5.0替换3.0菜单字段*/ export function field5Change3(_arr){ /*5.0字段替换3.0*/ let fieldConversion={ isActive:"fisactive", isOffline:"fisoffline", isShow:"fshow", name:"fresname", orderIndex:"forder", parentId:"frespguid", resId:"fresguid", resUrl:"fresurl", type:"frestype", }; _arr.map(item=>{ if(item.children&&item.children.length>0){ field5Change3(item.children); } for(let i in fieldConversion){ if(typeof(item[fieldConversion[i]])!="undefined"){ item[i]=item[fieldConversion[i]]; delete item[fieldConversion[i]]; } } if(!window._global){//正式环境 item.resUrl=window.HIVUI_SETTING.serverName+item.resUrl; } return item; }); return _arr; } export function turnMenuTree(data,isTop) {//data:平级数据;isTop:输出数据是否包含根节点 let map = {}; let val = []; //生成数据对象集合 data.forEach(it=>{ map[it.resId] = it; //resId为每个节点的id if(it.parentId!=-1||it.type!="root"){ isTop=true; } }); //生成结果集 data.forEach(it=>{ let parent = map[it.parentId]; //parentId为父节点的id if(parent){ if(!Array.isArray(parent.children)) parent.children = []; parent.children.push(it); }else{ val.push(it) } }); __sort(val); //排序 function __sort(__data,orderField="orderIndex"){ __data.sort((a,b)=>{ var value1 = a[orderField]||0; var value2 = b[orderField]||0; return value1 - value2; }); for(let i of __data){ if(i.children&&i.children.length>0){ __sort(i.children); } } } return isTop?val:val[0]?.children; }
import getScroll from './getScroll' export function getTargetRect(target) { return target !== window ? target.getBoundingClientRect() : { top: 0, left: 0, bottom: 0 }; } export function getOffset(element, target) { const elemRect = element.getBoundingClientRect(); const targetRect = getTargetRect(target); const scrollTop = getScroll(target, true); const scrollLeft = getScroll(target, false); const docElem = window.document.body; const clientTop = docElem.clientTop || 0; const clientLeft = docElem.clientLeft || 0; return { top: elemRect.top - targetRect.top + scrollTop - clientTop, left: elemRect.left - targetRect.left + scrollLeft - clientLeft, width: elemRect.width, height: elemRect.height, }; } export function getDefaultTarget() { return typeof window !== 'undefined' ? window : null; } /** * @method setUrlValue * @description 设置地址栏参数值 * @param url * @param pName * @param pValue * * @example: urlAppend("http://www.fdauto.com","userid=03870");�����http://www.fdauto.com?userid=03870;1` * urlAppend("http://www.fdauto.com?userid=03870","bumen=aj")�����http://www.fdauto.com?userid=03870&bumen=aj; */ export function setUrlValue(url, key, value) { var returnUrl = '' if (url.indexOf('?') == -1) { returnUrl += url + '?' + key + '=' + value } else { if (url.indexOf('?' + key + '=') == -1 && url.indexOf('&' + key + '=') == -1) { returnUrl += url + '&' + key + '=' + value } else { var isDone = false var startIndex = 0 var endIndex = url.length - 1 var parm = '?' + key + '=' for (var i = 0; i < url.length; i++) { if (url.substr(i, parm.length) == parm) { startIndex = i + parm.length for (var j = startIndex; j < url.length; j++) { if (url[j] == '&') { endIndex = j break } else if (j == url.length - 1) { endIndex = url.length } } isDone = true break } } if (!isDone) { parm = '&' + key + '=' for (var i = 0; i < url.length; i++) { if (url.substr(i, parm.length) == parm) { startIndex = i + parm.length for (var j = startIndex; j < url.length; j++) { if (url[j] == '&') { endIndex = j break } else if (j == url.length - 1) { endIndex = url.length } } break } } } var parmKeyValue = parm + url.substring(startIndex, endIndex) returnUrl = url.replace(parmKeyValue, parm + value) } } return returnUrl } /** * @method getUrlValue * @description 获取地址栏参数值 * @param name * string * @param url * string * @example: getUrlValue("p","http://www.baidu.com?p=5"); */ export function getUrlValue(url, name) { var str = url || window.location.search; if (str.indexOf("&" + name) != -1 || str.indexOf("?" + name) != -1) { var pos_start = "" if (str.indexOf("?" + name) > -1) pos_start = str.indexOf("?" + name) + name.length + 2; else pos_start = str.indexOf("&" + name) + name.length + 2; var pos_end = str.indexOf("&", pos_start); if (pos_end == -1) { return str.substring(pos_start); } else { return str.substring(pos_start, pos_end) } } else { return ""; } } export function getUrlSearch(url) { var name, value; var str = url; //取得整个地址栏 var num = str.indexOf("?") str = str.substr(num + 1); //取得所有参数 stringvar.substr(start [, length ] var arr = str.split("&"); //各个参数放到数组里 var search ={}; for (var i = 0; i < arr.length; i++) { num = arr[i].indexOf("="); if (num > 0) { name = arr[i].substring(0, num); value = arr[i].substr(num + 1); search[name] = value; } } return search; } /** * var str='这是一个测试的字符串:{0} {1}'.format('Hello','world'); * var str='这是一个测试的字符串:{str0} {str1}'.format({str0:'Hello',str1:'world'}); */ export function strFormat(str, args) { var result = str; if (arguments.length > 0) { if (arguments.length == 2 && typeof (args) == "object") { for (var key in args) { if (args[key] != undefined) { var reg = new RegExp("({" + key + "})", "g"); result = result.replace(reg, args[key]); } } } else { for (var i = 1; i < arguments.length; i++) { if (arguments[i] != undefined) { var reg = new RegExp("({)" + (i - 1) + "(})", "g"); result = result.replace(reg, arguments[i]); } } } } return result; } export function closeWindow(errorUrl){ if (document.all) { if (window.location.pathname == window.parent.location.pathname) { window.opener = null; window.open('', '_top'); window.top.close(); } } else { window.close(); } window.location.href = errorUrl || "about:blank"; } /*5.0替换3.0菜单字段*/ export function field5Change3(_arr){ /*5.0字段替换3.0*/ let fieldConversion={ isActive:"fisactive", isOffline:"fisoffline", isShow:"fshow", name:"fresname", orderIndex:"forder", parentId:"frespguid", resId:"fresguid", resUrl:"fresurl", type:"frestype", }; _arr.map(item=>{ if(item.children&&item.children.length>0){ field5Change3(item.children); } for(let i in fieldConversion){ if(typeof(item[fieldConversion[i]])!="undefined"){ item[i]=item[fieldConversion[i]]; delete item[fieldConversion[i]]; } } if(!window._global){//正式环境 item.resUrl=window.HIVUI_SETTING.serverName+item.resUrl; } return item; }); return _arr; } export function turnMenuTree(data,isTop) {//data:平级数据;isTop:输出数据是否包含根节点 let map = {}; let val = []; //生成数据对象集合 data.forEach(it=>{ map[it.resId] = it; //resId为每个节点的id if(it.parentId!=-1||it.type!="root"){ isTop=true; } }); //生成结果集 data.forEach(it=>{ let parent = map[it.parentId]; //parentId为父节点的id if(parent){ if(!Array.isArray(parent.children)) parent.children = []; parent.children.push(it); }else{ val.push(it) } }); __sort(val); function __sort(__data,orderField="orderIndex"){ __data.sort((a,b)=>{ var value1 = a[orderField]; var value2 = b[orderField]; return value1 - value2; }); for(let i of __data){ if(i.children&&i.children.length>0){ __sort(i.children); } } } return isTop?val:val[0]?.children; }
Show line notes below