提交代码

main
姜玉琦 2024-08-29 22:51:57 +08:00
parent a1fadd65a4
commit dd04c1adf5
18 changed files with 264 additions and 83 deletions

View File

@ -39,9 +39,9 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://cd-cynosdbmysql-grp-9rqrhxsm.sql.tencentcdb.com:27981/yanzhu_project?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
url: jdbc:mysql://62.234.3.186:3306/yanzhu_project?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: root
password: Sxyanzhu@cf
password: Sxyanzhu@cf123
# 从库数据源
slave:
# 从数据源开关/默认关闭

View File

@ -19,7 +19,7 @@ spring:
# 国际化资源文件路径
basename: i18n/messages
profiles:
active: test
active: prod
# 文件上传
servlet:
multipart:

View File

@ -166,6 +166,24 @@ public class TokenService
redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
}
/**
*
*
* @param token token
*/
public void refreshUserInfo(String token,LoginUser user)
{
Claims claims = parseToken(token);
// 解析对应的权限以及用户信息
String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
String userKey = getTokenKey(uuid);
user.setLoginTime(System.currentTimeMillis());
int mobileExpireTime = expireTime * 3650 * 60 ;
user.setExpireTime(user.getLoginTime() + mobileExpireTime * MILLIS_MINUTE);
// 根据uuid将loginUser缓存
redisCache.setCacheObject(userKey, user, mobileExpireTime, TimeUnit.MINUTES);
}
/**
*
*
@ -247,7 +265,7 @@ public class TokenService
* @param request
* @return token
*/
private String getToken(HttpServletRequest request)
public String getToken(HttpServletRequest request)
{
String token = request.getHeader(header);
if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX))

View File

@ -1,6 +1,7 @@
package com.yanzhu.web;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletResponse;
@ -8,6 +9,7 @@ import com.yanzhu.common.constant.Constants;
import com.yanzhu.common.core.domain.entity.SysDept;
import com.yanzhu.common.core.domain.entity.SysUser;
import com.yanzhu.common.core.redis.RedisCache;
import com.yanzhu.common.utils.StringUtils;
import com.yanzhu.system.service.ISysDeptService;
@ -41,11 +43,13 @@ import com.yanzhu.common.core.page.TableDataInfo;
public class BaseAssetsTypeController extends BaseController
{
@Autowired
private IBaseAssetsTypeService baseAssetsTypeService;
private RedisCache redisCache;
@Autowired
private ISysDeptService sysDeptService;
@Autowired
private RedisCache redisCache;
private IBaseAssetsTypeService baseAssetsTypeService;
/**
*
@ -107,21 +111,25 @@ public class BaseAssetsTypeController extends BaseController
}
void updateDeptUnit(BaseAssetsType baseAssetsType){
long deptId= baseAssetsType.getDeptId();
Long deptId= baseAssetsType.getDeptId();
String unit=baseAssetsType.getUnit();
if(unit==null || unit.trim().length()==0){
unit="";
}
String[] tmps= unit.split("[|]");
baseAssetsType.setUnit("");
baseAssetsType.setUnit(null);
if(tmps.length>0){
baseAssetsType.setUnit(tmps[0]);
if(StringUtils.isNotEmpty(tmps[0]) && !Objects.equals(tmps[0],"null")){
baseAssetsType.setUnit(tmps[0]);
}
}
if(tmps.length>1){
SysDept dept= sysDeptService.selectDeptById(deptId);
if(dept!=null){
dept.setUnit(tmps[1]);
sysDeptService.updateDept(dept);
if(tmps.length>1 && Objects.nonNull(deptId)){
if(StringUtils.isNotEmpty(tmps[1]) && !Objects.equals(tmps[1],"null")){
SysDept dept= sysDeptService.selectDeptById(deptId);
if(dept!=null){
dept.setUnit(tmps[1]);
sysDeptService.updateDept(dept);
}
}
}
}
@ -149,6 +157,22 @@ public class BaseAssetsTypeController extends BaseController
return toAjax(baseAssetsTypeService.deleteBaseAssetsTypeByIds(ids));
}
/**
*
*/
@GetMapping("/findParentTypesByCategory/{category}")
public AjaxResult findParentTypesByCategory(@PathVariable String category)
{
SysUser sysUser = super.getLoginUser().getUser();
String key = "YANZHU.BASE.ASSETSTYPE.findParentTypesByCategory." + sysUser.getParDeptId() + "." + category;
Object object = redisCache.getCacheObject(key);
if (object != null) {
return success(object);
}
List<BaseAssetsType> list = baseAssetsTypeService.findParentTypesByCategory(category);
redisCache.setCacheObject(key, list, Constants.BASE_DATA_EXPIRATION, TimeUnit.MINUTES);
return success(list);
}
/**
*

View File

@ -6,22 +6,32 @@ import com.yanzhu.common.annotation.RateLimiter;
import com.yanzhu.common.constant.Constants;
import com.yanzhu.common.core.controller.BaseController;
import com.yanzhu.common.core.domain.AjaxResult;
import com.yanzhu.common.core.domain.entity.SysDept;
import com.yanzhu.common.core.domain.entity.SysUser;
import com.yanzhu.common.core.domain.model.LoginBody;
import com.yanzhu.common.core.domain.model.LoginUser;
import com.yanzhu.common.core.redis.RedisCache;
import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.enums.BusinessType;
import com.yanzhu.common.enums.LimitType;
import com.yanzhu.common.enums.OperatorType;
import com.yanzhu.common.exception.ServiceException;
import com.yanzhu.framework.web.service.SysLoginService;
import com.yanzhu.framework.web.service.SysPermissionService;
import com.yanzhu.framework.web.service.TokenService;
import com.yanzhu.system.domain.vo.UpdatePwdVo;
import com.yanzhu.system.service.ISysDeptService;
import com.yanzhu.system.service.ISysUserService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Map;
import java.util.Objects;
/**
* @version : V1.0
@ -46,6 +56,12 @@ public class WxLoginController extends BaseController {
@Autowired
private ISysUserService sysUserService;
@Autowired
private ISysDeptService sysDeptService;
@Autowired
private SysPermissionService permissionService;
/**
*
*
@ -97,4 +113,37 @@ public class WxLoginController extends BaseController {
return success();
}
/**
* 线
*
* @return
*/
@ApiOperation(value = "刷线用户信息")
@RateLimiter(count = 10, limitType = LimitType.IP)
@GetMapping("/refreshUserInfo")
public AjaxResult refreshUserInfo(HttpServletRequest request)
{
SysUser user = sysUserService.selectUserByUserName(super.getUsername());
if(Objects.isNull(user)){
throw new ServiceException("用户信息异常...");
}
//设置项目单位信息
if(!user.isAdmin()){
//判断是否是段队管理员
String[] ancestors = user.getDept().getAncestors().split(",");
Long deptId = Convert.toLong(ancestors[ancestors.length-1]);
if(deptId != null){
SysDept sysDept = sysDeptService.selectDeptById(deptId);
user.setParDeptId(sysDept.getDeptId());
user.setParDeptName(sysDept.getDeptName());
}
}else{
user.setParDeptId(100L);
user.setParDeptName("中铁建设集团有限公司");
}
LoginUser loginUser = new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
tokenService.refreshUserInfo(tokenService.getToken(request),loginUser);
return success();
}
}

View File

@ -21,9 +21,12 @@ public class BaseAssetsType extends BaseEntity
private Long id;
/** 父级分类 */
@Excel(name = "父级分类")
private Long parentId;
/** 父级分类 */
@Excel(name = "父级分类")
private String parentName;
/** 单位主键 */
@Excel(name = "单位主键")
private Long deptId;
@ -130,6 +133,14 @@ public class BaseAssetsType extends BaseEntity
this.defaultDeptId = defaultDeptId;
}
public String getParentName() {
return parentName;
}
public void setParentName(String parentName) {
this.parentName = parentName;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -60,6 +60,14 @@ public interface IBaseAssetsTypeService
*/
public int deleteBaseAssetsTypeById(Long id);
/**
*
*
* @param category
* @return
*/
public List<BaseAssetsType> findParentTypesByCategory(String category);
/**
*
*

View File

@ -132,17 +132,34 @@ public class BaseAssetsTypeServiceImpl implements IBaseAssetsTypeService
return res;
}
/**
*
*
* @param category
* @return
*/
@Override
public List<BaseAssetsType> findParentTypesByCategory(String category){
BaseAssetsType baseAssetsType = new BaseAssetsType();
baseAssetsType.setParentId(0L);
baseAssetsType.setType(category);
baseAssetsType.setIsDel("0");
baseAssetsType.setDefaultDeptId(SecurityUtils.getLoginUser().getUser().getParDeptId());
return baseAssetsTypeMapper.selectBaseAssetsTypeList(baseAssetsType);
}
/**
*
*
* @param category
* @return
*/
@Override
public List<BaseAssetsType> findAllByCategory(String category){
//boolean isAdmin = SysUser.isAdmin(SecurityUtils.getUserId());
BaseAssetsType baseAssetsType = new BaseAssetsType();
baseAssetsType.setParentId(0L);
baseAssetsType.setType(category);
baseAssetsType.setIsDel("0");
List<BaseAssetsType> list = baseAssetsTypeMapper.selectBaseAssetsTypeList(baseAssetsType);
if(CollectionUtils.isNotEmpty(list)){
for(BaseAssetsType entity:list){

View File

@ -7,6 +7,7 @@
<resultMap type="BaseAssetsType" id="BaseAssetsTypeResult">
<result property="id" column="id" />
<result property="parentId" column="parent_id" />
<result property="parentName" column="parent_name" />
<result property="deptId" column="dept_id" />
<result property="type" column="type" />
<result property="name" column="name" />
@ -20,7 +21,8 @@
</resultMap>
<sql id="selectBaseAssetsTypeVo">
select id, parent_id, dept_id, type, name, unit, is_del, create_by, create_time, update_by, update_time, remark from base_assets_type
select t.id, t.parent_id, pt.name as parent_name, t.dept_id, t.type, t.name, t.unit, t.is_del, t.create_by, t.create_time, t.update_by, t.update_time, t.remark from base_assets_type t
left join base_assets_type pt on pt.id = t.parent_id
</sql>
<select id="selectBaseAssetsTypeList" parameterType="BaseAssetsType" resultMap="BaseAssetsTypeResult">
@ -28,27 +30,27 @@
<where>
<if test="parentId != null ">
<if test="parentId == 0 ">
and parent_id is null
and t.parent_id is null
</if>
<if test="parentId == -1 ">
and parent_id is not null
and t.parent_id is not null
</if>
<if test="parentId &gt; 0 ">
and parent_id = #{parentId}
and t.parent_id = #{parentId}
</if>
</if>
<if test="deptId != null "> and dept_id = #{deptId}</if>
<if test="type != null and type != ''"> and type = #{type}</if>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="unit != null and unit != ''"> and unit = #{unit}</if>
<if test="isDel != null and isDel != ''"> and is_del = #{isDel}</if>
<if test="defaultDeptId != null"> and (dept_id is null or dept_id = #{defaultDeptId})</if>
<if test="deptId != null "> and t.dept_id = #{deptId}</if>
<if test="type != null and type != ''"> and t.type = #{type}</if>
<if test="name != null and name != ''"> and t.name like concat('%', #{name}, '%')</if>
<if test="unit != null and unit != ''"> and t.unit = #{unit}</if>
<if test="isDel != null and isDel != ''"> and t.is_del = #{isDel}</if>
<if test="defaultDeptId != null"> and (t.dept_id is null or t.dept_id = #{defaultDeptId})</if>
</where>
</select>
<select id="selectBaseAssetsTypeById" parameterType="Long" resultMap="BaseAssetsTypeResult">
<include refid="selectBaseAssetsTypeVo"/>
where id = #{id}
where t.id = #{id}
</select>
<insert id="insertBaseAssetsType" parameterType="BaseAssetsType" useGeneratedKeys="true" keyProperty="id">
@ -111,6 +113,6 @@
</delete>
<select id="selectBaseAssetsTypeLevel2" resultMap="BaseAssetsTypeResult">
<include refid="selectBaseAssetsTypeVo"/>
where parent_id is null and is_del=0
where t.parent_id is null and t.is_del=0
</select>
</mapper>

View File

@ -1,10 +1,10 @@
# 页面标题
VUE_APP_TITLE = 研筑临时项目管理系统
VUE_APP_TITLE = 临建管家
# 开发环境配置
ENV = 'development'
# 研筑临时项目管理系统/开发环境
# 临建管家/开发环境
VUE_APP_BASE_API = '/yanZhuProject'
# 路由懒加载

View File

@ -1,8 +1,8 @@
# 页面标题
VUE_APP_TITLE = 研筑临时项目管理系统
VUE_APP_TITLE = 临建管家
# 生产环境配置
ENV = 'production'
# 研筑临时项目管理系统/生产环境
# 临建管家/生产环境
VUE_APP_BASE_API = '/yanZhuProject'

View File

@ -1,10 +1,10 @@
# 页面标题
VUE_APP_TITLE = 研筑临时项目管理系统
VUE_APP_TITLE = 临建管家
NODE_ENV = production
# 测试环境配置
ENV = 'staging'
# 研筑临时项目管理系统/测试环境
# 临建管家/测试环境
VUE_APP_BASE_API = '/stage-api'

View File

@ -1,7 +1,7 @@
{
"name": "yanZhu",
"version": "3.8.7",
"description": "研筑临时项目管理系统",
"description": "临建管家",
"author": "研筑科技",
"license": "MIT",
"scripts": {

View File

@ -50,6 +50,14 @@ export function listLevel2(){
})
}
// 查询二级分类物资类型
export function findParentTypesByCategory(category) {
return request({
url: '/base/assetsType/findParentTypesByCategory/' + category,
method: 'get'
})
}
// 根据分类查询物资
export function findAllByCategory(category) {
return request({

View File

@ -62,18 +62,27 @@
<el-table-column label="资产名称" align="left" prop="name">
<template slot-scope="scope">
<el-tag v-if="!scope.row.deptId" effect="dark" type="danger"></el-tag>
{{ scope.row.name }}
<span style="margin-left:10px;"><span v-if="scope.row.parentId">{{scope.row.parentName +' > '}}</span>{{scope.row.name }}<span>
</template>
</el-table-column>
<el-table-column label="资产单位" align="center" prop="unit" />
<el-table-column label="是否启用" align="center">
<template slot-scope="scope">
<el-switch v-if="scope.row.deptId || !nonAdmin" v-model="scope.row.isDel" active-value="0" inactive-value="1"
@change="setStatus(scope.row, $event)"></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160">
<template slot-scope="scope">
<template v-if="scope.row.deptId">
<template v-if="scope.row.deptId || !nonAdmin">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['base:assetsType:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['base:assetsType:remove']">删除</el-button>
</template>
<template v-else>
<el-button type="danger" link disabled>系统级不能修改</el-button>
</template>
</template>
</el-table-column>
</el-table>
@ -85,30 +94,30 @@
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body custom-class="assets-type-dialog" :close-on-click-modal="false"
:close-on-press-escape="false">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="公司名称">
<el-form-item label="公司名称" v-if="nonAdmin">
<el-input v-model="form.compName" disabled />
</el-form-item>
<el-form-item label="项目名称">
<el-form-item label="项目名称" v-if="nonAdmin">
<el-input v-model="form.deptName" disabled />
</el-form-item>
<el-form-item label="一级分类" prop="type">
<el-select v-model="form.type" placeholder="请选择资产类型" @change="doLvl1Change">
<el-form-item label="资产类型" prop="type">
<el-select v-model="form.type" placeholder="请选择资产类型" @change="doLvl1Change" style="width:100%">
<el-option v-for="dict in dict.type.sys_process_category" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="级分类" prop="parentId">
<el-select v-model="form.parentId" placeholder="请选择资产类型">
<el-option v-for="it in lvl2Opts" :key="it.id" :label="it.name" :value="it.id"></el-option>
<el-form-item label="级分类" prop="parentId">
<el-select v-model="form.parentId" placeholder="请选择父级分类" style="width:100%">
<el-option v-for="item in parentTypeOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="资产名称" prop="name">
<el-input v-model="form.name" placeholder="请输入资产名称" />
</el-form-item>
<el-form-item label="资产单位" prop="sunit">
<el-form-item label="资产单位" prop="sunit" v-if="form.parentId">
<el-input v-model="form.sunit" placeholder="请输入资产单位" />
</el-form-item>
<div class="div-unit">
<div class="div-unit" v-if="form.parentId">
<el-tag v-for="(it, idx) in units" :class="{ 'is-selected': it.sel, 'is-del': it.del }" @close="doCloseTag(it, idx)"
:closable="!it.sys" @click="doSelTag(it)" :key="idx">
<i class="el-icon-check"></i>
@ -125,7 +134,7 @@
</template>
<script>
import { listAssetsType, getAssetsType, delAssetsType, addAssetsType, updateAssetsType, listLevel2 } from "@/api/base/assetsType";
import { listAssetsType, getAssetsType, delAssetsType, addAssetsType, updateAssetsType, listLevel2, findParentTypesByCategory } from "@/api/base/assetsType";
import { listDept } from '@/api/system/dept'
export default {
name: "AssetsType",
@ -158,7 +167,6 @@ export default {
open: false,
//
queryParams: {
parentId: -1,
pageNum: 1,
pageSize: 10,
compyId: null,
@ -172,12 +180,17 @@ export default {
form: {},
//
rules: {
type: [{ required: true, message: "资产类型不能为空", trigger: "change" }],
name: [{ required: true, message: "资产名称不能为空", trigger: "blur" }]
}
},
parentTypeOptions:[],
nonAdmin:true,
};
},
created() {
if(this.$store.getters.userId==1){
this.nonAdmin = false
}
listDept().then(d => {
this.deptOpts = d.data || [];
this.compyOpts = this.deptOpts.filter(it => it.parentId == 100)
@ -196,7 +209,6 @@ export default {
listLevel2().then(d => {
this.lvlDatas = d.data;
})
},
methods: {
doCloseTag(tag) {
@ -213,11 +225,15 @@ export default {
}
tag.sel = !tag.sel;
},
doLvl1Change(a) {
this.lvl2Opts = this.lvlDatas.filter(d => d.type == a);
if (this.lvl2Opts.length > 0) {
this.form.parentId = this.lvl2Opts[0].id;
}
doLvl1Change(value) {
// this.lvl2Opts = this.lvlDatas.filter(d => d.type == a);
// if (this.lvl2Opts.length > 0) {
// this.form.parentId = this.lvl2Opts[0].id;
// }
this.form.parentId = null;
findParentTypesByCategory(value).then(res =>{
this.parentTypeOptions = res.data||[];
});
},
doCompyChange(a) {
let tmps = this.compyOpts.filter(d => d.deptId == a);
@ -272,7 +288,7 @@ export default {
this.form = {
id: null,
parentId: null,
deptId: this.queryParams.defaultDeptId,
deptId: this.nonAdmin?this.queryParams.defaultDeptId:null,
type: null,
name: null,
sunit: null,
@ -289,14 +305,13 @@ export default {
tmps = this.prjOpts.filter(d => d.deptId == this.form.deptId);
this.form.deptName = tmps.length > 0 ? tmps[0].deptName : "";
tmps = this.dict.type.sys_process_category
if (tmps.length > 0) {
this.form.type = tmps[0].value;
this.lvl2Opts = this.lvlDatas.filter(d => d.type == this.form.type);
if (this.lvl2Opts.length > 0) {
this.form.parentId = this.lvl2Opts[0].id;
}
}
// if (tmps.length > 0) {
// this.form.type = tmps[0].value;
// this.lvl2Opts = this.lvlDatas.filter(d => d.type == this.form.type);
// if (this.lvl2Opts.length > 0) {
// this.form.parentId = this.lvl2Opts[0].id;
// }
// }
this.resetForm("form");
this.doPrjChange(this.queryParams.defaultDeptId)
},
@ -327,25 +342,28 @@ export default {
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
let tmps=row.unit.split(",").filter(d=>d);
let uns=this.units.map(d=>d.text).join(",")
tmps.forEach(it=>{
if((","+uns+",").indexOf(","+it+",")==-1){
this.units.push({
text:it,
del:false,
sys:false
})
}
});
this.units.forEach(it=>{
it.sel=(","+row.unit+",").indexOf(","+it.text+",")>=0;
});
if(row.unit){
let tmps=row.unit.split(",").filter(d=>d);
let uns=this.units.map(d=>d.text).join(",")
tmps.forEach(it=>{
if((","+uns+",").indexOf(","+it+",")==-1){
this.units.push({
text:it,
del:false,
sys:false
})
}
});
this.units.forEach(it=>{
it.sel=(","+row.unit+",").indexOf(","+it.text+",")>=0;
});
}
getAssetsType(id).then(response => {
this.form = {...response.data,sunit:''};
this.open = true;
this.title = "修改物资类型";
});
this.doLvl1Change(row.type);
},
/** 提交按钮 */
submitForm() {
@ -377,6 +395,32 @@ export default {
}
});
},
//
setStatus(row, val) {
this.$confirm(`是否确认修改数据为${val == "0" ? "有效" : "无效"}`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(async () => {
let param = {
id: row.id,
isDel: val,
};
updateAssetsType(param).then((response) => {
this.$modal.msgSuccess("修改成功");
this.getList();
});
})
.catch(() => {
//
if (val == "0") {
row.isDel = "1";
} else {
row.isDel = "0";
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;

View File

@ -1,7 +1,7 @@
<template>
<div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title">研筑临时项目管理系统</h3>
<h3 class="title">临建管家</h3>
<el-form-item prop="username">
<el-input
v-model="loginForm.username"

View File

@ -1,7 +1,7 @@
<template>
<div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">研筑临时项目管理系统</h3>
<h3 class="title">临建管家</h3>
<el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

View File

@ -7,7 +7,7 @@ function resolve(dir) {
const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || '研筑临时项目管理系统' // 网页标题
const name = process.env.VUE_APP_TITLE || '临建管家' // 网页标题
const port = process.env.port || process.env.npm_config_port || 80 // 端口
@ -18,7 +18,7 @@ module.exports = {
// 部署生产环境和开发环境下的URL。
// 默认情况下Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.yanZhu.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.yanZhu.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/prjapp" : "/prjapp",
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
// 在npm run build 或 yarn build 时 生成文件的目录名称要和baseUrl的生产环境路径一致默认dist
outputDir: 'dist',
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)