Browse Source

1、修复bug;

2、上传图片;
dev
mh 5 months ago
parent
commit
b49a599fe3
  1. 60
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfFileController.java
  2. 18
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java
  3. 5
      ruoyi-admin/src/main/resources/application-prod.yml
  4. 6
      ruoyi-admin/src/main/resources/application.yml
  5. 2
      ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java
  6. 2
      ruoyi-ui/.env.development
  7. 2
      ruoyi-ui/.env.production
  8. 2
      ruoyi-ui/package.json
  9. 11
      ruoyi-ui/src/api/workflow/process.js
  10. BIN
      ruoyi-ui/src/assets/images/bg.png
  11. 2
      ruoyi-ui/src/layout/components/Sidebar/Logo.vue
  12. 20
      ruoyi-ui/src/router/index.js
  13. 2
      ruoyi-ui/src/utils/request.js
  14. 8
      ruoyi-ui/src/views/login.vue
  15. 2
      ruoyi-ui/src/views/register.vue
  16. 54
      ruoyi-ui/src/views/workflow/work/detail_cellphone.vue
  17. 49
      ruoyi-ui/src/views/workflow/work/own_cellphone.vue
  18. 4
      ruoyi-ui/src/views/workflow/work/start.vue
  19. 46
      ruoyi-ui/src/views/workflow/work/start_cellphone.vue
  20. 2
      ruoyi-ui/vue.config.js

60
ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfFileController.java

@ -0,0 +1,60 @@
package com.ruoyi.web.controller.workflow;
import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.domain.vo.SysOssVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* @author LJF
* @version 1.0
* @project ruoyi-flowable-plus
* @description 流程文件Controller
* @date 2024-04-26 15:25:13
*/
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/workflow/file")
public class WfFileController extends BaseController {
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Map<String, String>> upload(@RequestPart("file") MultipartFile file) throws IOException {
//http://localhost:81/dev-api/workflow/file/upload
if (ObjectUtil.isNull(file)) {
return R.fail("上传文件不能为空");
}
//获取原始文件名
String originalFilename = file.getOriginalFilename();
//获取文件扩展名 123.2.1.jpg
int index = originalFilename.lastIndexOf("."); //最后一个.的下标
String extname = originalFilename.substring(index);
//构造唯一的文件名(不能重复) -- uuid(通用唯一识别码)040bf482-284b-40a6-bf61-15c811d1b0d0
String newFilename = UUID.randomUUID().toString() + extname;
log.info("新的文件名:{}", newFilename);
//将文件存储在服务器的磁盘目录中 D:\demo\files
file.transferTo(new File("D:\\mh_code\\flowable\\image\\"
+ newFilename));
Map<String, String> map = new HashMap<>(2);
map.put("url", "https://bx.mhito.net/images/"+newFilename);
map.put("fileName", originalFilename);
map.put("ossId", String.valueOf(UUID.randomUUID()));
return R.ok(map);
}
}

18
ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java

@ -199,8 +199,23 @@ public class WfProcessController extends BaseController {
* @param variables 变量集合,json对象 * @param variables 变量集合,json对象
*/ */
@SaCheckPermission("workflow:process:start") @SaCheckPermission("workflow:process:start")
@PostMapping("/start/{processDefId}/{cellphone}") @PostMapping("/start/{processDefId}")
public R<Void> start(@PathVariable(value = "processDefId") String processDefId, public R<Void> start(@PathVariable(value = "processDefId") String processDefId,
@RequestBody Map<String, Object> variables) {
processService.startProcessByDefId(processDefId, null, variables);
return R.ok("流程启动成功");
}
/**
* 根据流程定义id启动流程实例
*
* @param processDefId 流程定义id
* @param variables 变量集合,json对象
*/
@SaCheckPermission("workflow:process:start")
@PostMapping("/start/{processDefId}/{cellphone}")
public R<Void> startCellphone(@PathVariable(value = "processDefId") String processDefId,
@PathVariable(value = "cellphone") String cellphone, @PathVariable(value = "cellphone") String cellphone,
@RequestBody Map<String, Object> variables) { @RequestBody Map<String, Object> variables) {
processService.startProcessByDefId(processDefId, cellphone, variables); processService.startProcessByDefId(processDefId, cellphone, variables);
@ -208,6 +223,7 @@ public class WfProcessController extends BaseController {
} }
/** /**
* 删除流程实例 * 删除流程实例
* *

5
ruoyi-admin/src/main/resources/application-prod.yml

@ -172,3 +172,8 @@ sms:
signName: 测试 signName: 测试
# 腾讯专用 # 腾讯专用
sdkAppId: sdkAppId:
server:
ssl:
key-store: classpath:bxserver.mhito.net.jks
key-password: 177d9hyfm595i2
key-store-type: JKS

6
ruoyi-admin/src/main/resources/application.yml

@ -45,10 +45,6 @@ server:
io: 8 io: 8
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载 # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
worker: 256 worker: 256
ssl:
key-store: classpath:bxserver.mhito.net.jks
key-password: 177d9hyfm595i2
key-store-type: JKS
# 日志配置 # 日志配置
logging: logging:
@ -74,7 +70,7 @@ spring:
# 国际化资源文件路径 # 国际化资源文件路径
basename: i18n/messages basename: i18n/messages
profiles: profiles:
active: prod active: dev
# 文件上传 # 文件上传
servlet: servlet:
multipart: multipart:

2
ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java

@ -713,6 +713,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDef.getId(), variables); ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDef.getId(), variables);
// 第一个用户任务为发起人,则自动完成任务 // 第一个用户任务为发起人,则自动完成任务
wfTaskService.startFirstTask(processInstance, variables); wfTaskService.startFirstTask(processInstance, variables);
if (StringUtils.isNotBlank(cellphone)) {
// 流程编号跟手机绑定 // 流程编号跟手机绑定
String deploymentId = procDef.getDeploymentId(); String deploymentId = procDef.getDeploymentId();
UserDeployRelationBo userDeployRelationBo = new UserDeployRelationBo(); UserDeployRelationBo userDeployRelationBo = new UserDeployRelationBo();
@ -721,6 +722,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
userDeployRelationBo.setCellphone(cellphone); userDeployRelationBo.setCellphone(cellphone);
userDeployRelationService.insertByBo(userDeployRelationBo); userDeployRelationService.insertByBo(userDeployRelationBo);
} }
}
/** /**

2
ruoyi-ui/.env.development

@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 广州城市学院报修管理系统 VUE_APP_TITLE = 广州市城市建设职业学校
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'

2
ruoyi-ui/.env.production

@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 广州城市学院报修管理系统 VUE_APP_TITLE = 广州市城市建设职业学校
# 生产环境配置 # 生产环境配置
ENV = 'production' ENV = 'production'

2
ruoyi-ui/package.json

@ -1,7 +1,7 @@
{ {
"name": "flowable-plus", "name": "flowable-plus",
"version": "0.8.3", "version": "0.8.3",
"description": "广州城市学院报修管理系统", "description": "广州市城市建设职业学校",
"author": "mh", "author": "mh",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {

11
ruoyi-ui/src/api/workflow/process.js

@ -19,7 +19,7 @@ export function getProcessForm(query) {
} }
// 部署流程实例 // 部署流程实例
export function startProcess(processDefId, cellphone, data) { export function startProcessCellphone(processDefId, cellphone, data) {
return request({ return request({
url: '/workflow/process/start/' + processDefId + '/' + cellphone, url: '/workflow/process/start/' + processDefId + '/' + cellphone,
method: 'post', method: 'post',
@ -27,6 +27,15 @@ export function startProcess(processDefId, cellphone, data) {
}) })
} }
// 部署流程实例
export function startProcess(processDefId, data) {
return request({
url: '/workflow/process/start/' + processDefId,
method: 'post',
data: data
})
}
// 删除流程实例 // 删除流程实例
export function delProcess(ids) { export function delProcess(ids) {
return request({ return request({

BIN
ruoyi-ui/src/assets/images/bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

2
ruoyi-ui/src/layout/components/Sidebar/Logo.vue

@ -40,7 +40,7 @@ export default {
}, },
data() { data() {
return { return {
title: '广州城市学院报修管理系统', title: '广州市城市建设职业学校',
logo: logoImg logo: logoImg
} }
} }

20
ruoyi-ui/src/router/index.js

@ -5,6 +5,7 @@ Vue.use(Router)
/* Layout */ /* Layout */
import Layout from '@/layout' import Layout from '@/layout'
import { getToken } from '@/utils/auth'
/** /**
* Note: 路由配置项 * Note: 路由配置项
@ -250,3 +251,22 @@ export default new Router({
scrollBehavior: () => ({ y: 0 }), scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes routes: constantRoutes
}) })
//使用钩子函数对路由进行权限跳转
// Router.beforeEach((to, from, next) => {
// let accessToken = getToken();
// if (to.matched.some(record => record.meta.requireAuth)) { // 判断该路由是否需要登录权限
// if (!accessToken) { // 判断当前的token是否存在
// next({
// name: 'login',
// query: { redirect: to.fullPath } //将跳转的路由path作为参数,登录成功后跳转到该路由
// })
// } else {
// next()
// }
// } else {
// next()
// }
// }
// )

2
ruoyi-ui/src/utils/request.js

@ -102,7 +102,7 @@ service.interceptors.response.use(res => {
} else { } else {
return res.data return res.data
} }
}, },
error => { error => {
console.log('err' + error) console.log('err' + error)
let { message } = error; let { message } = error;

8
ruoyi-ui/src/views/login.vue

@ -1,7 +1,7 @@
<template> <template>
<div class="login"> <div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"> <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-form-item prop="username">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号"> <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
@ -131,7 +131,11 @@ export default {
Cookies.remove('rememberMe'); Cookies.remove('rememberMe');
} }
this.$store.dispatch("Login", this.loginForm).then(() => { this.$store.dispatch("Login", this.loginForm).then(() => {
this.$router.push({ path: this.redirect || "/" }).catch(() => { }); var redirect = decodeURIComponent(this.$route.query.redirect || '/');
this.$router.push({ path: redirect })// decodeURIComponent URI
// this.$router.push({
// path: this.redirect || "/"
// }).catch(() => { });
}).catch(() => { }).catch(() => {
this.loading = false; this.loading = false;
if (this.captchaEnabled) { if (this.captchaEnabled) {

2
ruoyi-ui/src/views/register.vue

@ -1,7 +1,7 @@
<template> <template>
<div class="register"> <div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form"> <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-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号"> <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" /> <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

54
ruoyi-ui/src/views/workflow/work/detail_cellphone.vue

@ -1,5 +1,10 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="account">
<div class="all-money">
<div class="money-text-two">报修详情</div>
</div>
</div>
<el-tabs tab-position="top" :value="processed === true ? 'approval' : 'form'"> <el-tabs tab-position="top" :value="processed === true ? 'approval' : 'form'">
<el-tab-pane label="任务办理" name="approval" v-if="processed === true"> <el-tab-pane label="任务办理" name="approval" v-if="processed === true">
@ -80,11 +85,11 @@
<el-col :span="20" :offset="2"> <el-col :span="20" :offset="2">
<div class="block"> <div class="block">
<el-timeline> <el-timeline>
<el-timeline-item v-for="(item, index) in historyProcNodeList" :key="index" :icon="setIcon(item.endTime)" <el-timeline-item v-for="(item, index) in historyProcNodeList" :key="index"
:color="setColor(item.endTime)"> :icon="setIcon(item.endTime)" :color="setColor(item.endTime)">
<p style="font-weight: 700">{{ item.activityName }}</p> <p style="font-weight: 700">{{ item.activityName }}</p>
<el-card v-if="item.activityType === 'startEvent'" class="box-card" shadow="hover"> <el-card v-if="item.activityType === 'startEvent'" class="box-card" shadow="hover">
{{ item.assigneeName }} {{ item.createTime }} 发起流程 {{ item.createTime }} 提交工单
</el-card> </el-card>
<el-card v-if="item.activityType === 'userTask'" class="box-card" shadow="hover"> <el-card v-if="item.activityType === 'userTask'" class="box-card" shadow="hover">
<el-descriptions :column="1" :labelStyle="{ 'font-weight': 'bold' }"> <el-descriptions :column="1" :labelStyle="{ 'font-weight': 'bold' }">
@ -123,12 +128,12 @@
</el-card> </el-card>
</el-tab-pane> </el-tab-pane>
<!-- <el-tab-pane label="流程跟踪" name="track">--> <!-- <el-tab-pane label="流程跟踪" name="track">-->
<!-- <el-card class="box-card" shadow="never">--> <!-- <el-card class="box-card" shadow="never">-->
<!-- <process-viewer :key="`designer-${loadIndex}`" :style="'height:' + height" :xml="xmlData"--> <!-- <process-viewer :key="`designer-${loadIndex}`" :style="'height:' + height" :xml="xmlData"-->
<!-- :finishedInfo="finishedInfo" :allCommentList="historyProcNodeList" />--> <!-- :finishedInfo="finishedInfo" :allCommentList="historyProcNodeList" />-->
<!-- </el-card>--> <!-- </el-card>-->
<!-- </el-tab-pane>--> <!-- </el-tab-pane>-->
</el-tabs> </el-tabs>
<!--退回流程--> <!--退回流程-->
@ -136,8 +141,8 @@
<el-form ref="taskForm" :model="taskForm" label-width="80px"> <el-form ref="taskForm" :model="taskForm" label-width="80px">
<el-form-item label="退回节点" prop="targetKey"> <el-form-item label="退回节点" prop="targetKey">
<el-radio-group v-model="taskForm.targetKey"> <el-radio-group v-model="taskForm.targetKey">
<el-radio-button v-for="item in returnTaskList" :key="item.id" <el-radio-button v-for="item in returnTaskList" :key="item.id" :label="item.id">{{ item.name
:label="item.id">{{ item.name }}</el-radio-button> }}</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -653,4 +658,31 @@ export default {
width: 80%; width: 80%;
margin: 15px auto; margin: 15px auto;
} }
.app-container {
border-radius: 100px;
overflow: hidden;
}
.account {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding-top: 0.32rem;
width: 100%;
height: 10rem;
position: relative;
padding-bottom: 0.4rem;
background-image: url(../../../assets/images/bg.png);
background-repeat: no-repeat;
.money-text-two {
font-size: 2rem;
line-height: 0.43rem;
letter-spacing: 0.02rem;
color: #ffffff;
margin: 0.04rem 0 0.18rem 0;
}
}
</style> </style>

49
ruoyi-ui/src/views/workflow/work/own_cellphone.vue

@ -1,10 +1,19 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> <div class="account">
<div class="all-money">
<div class="money-text-two">我的报修</div>
</div>
</div>
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" style="padding: 5px;">
<el-form-item label="提交时间"> <el-form-item label="提交时间">
<el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange" <!-- <el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"></el-date-picker> :default-time="['00:00:00', '23:59:59']"></el-date-picker> -->
<el-date-picker v-model="startTime" type="date" style="width: 125px; font-size: 10px; padding-right: 0px;"
value-format="yyyy-MM-dd" placeholder="开始时间" />-
<el-date-picker v-model="endTime" type="date" style="width: 125px; font-size: 10px;" value-format="yyyy-MM-dd"
placeholder="结束时间" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@ -111,6 +120,8 @@ export default {
// //
rules: { rules: {
}, },
startTime: undefined,
endTime: undefined
}; };
}, },
created() { created() {
@ -128,6 +139,8 @@ export default {
}, },
/** 查询流程定义列表 */ /** 查询流程定义列表 */
getList() { getList() {
this.dateRange[0] = this.startTime;
this.dateRange[1] = this.endTime;
this.loading = true; this.loading = true;
this.queryParams.cellphone = this.$route.query && this.$route.query.cellphone; this.queryParams.cellphone = this.$route.query && this.$route.query.cellphone;
listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => { listOwnProcess(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
@ -164,6 +177,8 @@ export default {
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.startTime = "";
this.endTime = "";
this.dateRange = []; this.dateRange = [];
this.resetForm("queryForm"); this.resetForm("queryForm");
this.handleQuery(); this.handleQuery();
@ -229,3 +244,31 @@ export default {
} }
}; };
</script> </script>
<style lang="scss" scoped>
.app-container {
border-radius: 100px;
overflow: hidden;
}
.account {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding-top: 0.32rem;
width: 100%;
height: 10rem;
position: relative;
padding-bottom: 0.4rem;
background-image: url(../../../assets/images/bg.png);
background-repeat: no-repeat;
.money-text-two {
font-size: 2rem;
line-height: 0.43rem;
letter-spacing: 0.02rem;
color: #ffffff;
margin: 0.04rem 0 0.18rem 0;
}
}
</style>

4
ruoyi-ui/src/views/workflow/work/start.vue

@ -48,7 +48,7 @@ export default {
this.formData = data.formData || {}; this.formData = data.formData || {};
this.formOpen = true this.formOpen = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.vFormRef.setFormJson(this.formModel || {formConfig: {}, widgetList: []}) this.$refs.vFormRef.setFormJson(this.formModel || { formConfig: {}, widgetList: [] })
}) })
}) })
}, },
@ -63,7 +63,7 @@ export default {
}) })
}) })
} }
}).catch(err=>{ }).catch(err => {
this.$modal.msgError(err); this.$modal.msgError(err);
}) })
}, },

46
ruoyi-ui/src/views/workflow/work/start_cellphone.vue

@ -1,9 +1,11 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card"> <div class="account">
<div slot="header" class="clearfix"> <div class="all-money">
<span>填写报修单</span> <div class="money-text-two">我要报修</div>
</div>
</div> </div>
<el-card class="box-card">
<div class="form-conf" v-if="formOpen"> <div class="form-conf" v-if="formOpen">
<v-form-render :form-json="formModel" :form-data="formData" ref="vFormRef"></v-form-render> <v-form-render :form-json="formModel" :form-data="formData" ref="vFormRef"></v-form-render>
<div class="cu-submit"> <div class="cu-submit">
@ -16,7 +18,7 @@
</template> </template>
<script> <script>
import { getProcessForm, startProcess } from '@/api/workflow/process' import { getProcessForm, startProcessCellphone } from '@/api/workflow/process'
export default { export default {
name: 'WorkStart', name: 'WorkStart',
@ -58,12 +60,11 @@ export default {
this.$refs.vFormRef.getFormData().then(formData => { this.$refs.vFormRef.getFormData().then(formData => {
if (this.definitionId) { if (this.definitionId) {
// //
startProcess(this.definitionId, this.cellphone, JSON.stringify(formData)).then(res => { startProcessCellphone(this.definitionId, this.cellphone, JSON.stringify(formData)).then(res => {
this.$modal.msgSuccess(res.msg); this.$modal.msgSuccess(res.msg);
window.history.go(-1); this.$tab.closeOpenPage({
// this.$tab.closeOpenPage({ path: '/bx/list?cellphone=' + this.cellphone
// path: '/work/own' })
// })
}) })
} }
}).catch(err => { }).catch(err => {
@ -88,4 +89,31 @@ export default {
margin-top: 15px; margin-top: 15px;
text-align: center; text-align: center;
} }
.app-container {
border-radius: 100px;
overflow: hidden;
}
.account {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding-top: 0.32rem;
width: 100%;
height: 10rem;
position: relative;
padding-bottom: 0.4rem;
background-image: url(../../../assets/images/bg.png);
background-repeat: no-repeat;
.money-text-two {
font-size: 2rem;
line-height: 0.43rem;
letter-spacing: 0.02rem;
color: #ffffff;
margin: 0.04rem 0 0.18rem 0;
}
}
</style> </style>

2
ruoyi-ui/vue.config.js

@ -7,7 +7,7 @@ function resolve(dir) {
const CompressionPlugin = require('compression-webpack-plugin') 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 // 端口 const port = process.env.port || process.env.npm_config_port || 80 // 端口

Loading…
Cancel
Save