hcj 2 months ago
parent c7e3f0db08
commit fc5f33924f
  1. 2
      README.md
  2. 29
      src/views/components/CrowdsourceAudit.vue
  3. 34
      src/views/components/TaskInfo.vue
  4. 1
      src/views/system/user/index.vue
  5. 87
      src/views/trainService/signlist.vue

@ -7,6 +7,8 @@ git clone https://gitee.com/y_project/RuoYi-Vue
# 进入项目目录 # 进入项目目录
cd ruoyi-ui cd ruoyi-ui
### node版本需求 16.15.0
# 安装依赖 # 安装依赖
npm install npm install

@ -7,7 +7,7 @@
<el-descriptions-item label="需要人数">{{ task.needPerson }}</el-descriptions-item> <el-descriptions-item label="需要人数">{{ task.needPerson }}</el-descriptions-item>
<el-descriptions-item label="测试类型"> <el-descriptions-item label="测试类型">
<!-- <test-type :type="task.testType"></test-type> --> <!-- <test-type :type="task.testType"></test-type> -->
<span>{{ findLabelValueByProp(list, task.testType, 'dictValue', 'dictLabel')}}</span> <span>{{ findLabelValueByProp(list, task.testType, 'dictValue', 'dictLabel') }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="测试技能要求">{{ task.techNeed }}</el-descriptions-item> <el-descriptions-item label="测试技能要求">{{ task.techNeed }}</el-descriptions-item>
<el-descriptions-item label="任务金额"> <el-descriptions-item label="任务金额">
@ -30,7 +30,7 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="项目附件"> <el-descriptions-item label="项目附件">
<template v-if="task.attachment"> <template v-if="task.attachment">
<div v-for="(it,index) in task.attachmentArr" :key="it" class="uploaddiv"> <div v-for="(it, index) in task.attachmentArr" :key="it" class="uploaddiv">
<img title="点击下载查看" @click="uploaddivClick(it)" src="@/assets/images/crowd/upload.png" alt=""> <img title="点击下载查看" @click="uploaddivClick(it)" src="@/assets/images/crowd/upload.png" alt="">
<span title="点击下载查看" @click="uploaddivClick(it)">项目附件{{ index + 1 }}</span> <span title="点击下载查看" @click="uploaddivClick(it)">项目附件{{ index + 1 }}</span>
</div> </div>
@ -123,7 +123,8 @@
</el-col> </el-col>
</el-row> </el-row>
<div style="display: flex; justify-content: center"> <div style="display: flex; justify-content: center">
<el-button type="primary" @click="audit(1)" style="padding: 10px !important; margin-right: 30px !important">审核通过</el-button> <el-button type="primary" @click="audit(1)"
style="padding: 10px !important; margin-right: 30px !important">审核通过</el-button>
<el-button type="danger" @click="audit(2)" style="padding: 10px !important">审核不通过</el-button> <el-button type="danger" @click="audit(2)" style="padding: 10px !important">审核不通过</el-button>
</div> </div>
</el-form> </el-form>
@ -138,10 +139,10 @@ import OnsiteType from './enum/OnsiteType'
import TesterType from './enum/TesterType' import TesterType from './enum/TesterType'
const levelMap = { const levelMap = {
'0':'无门槛', '0': '无门槛',
'1':'一级', '1': '一级',
'2':'二级', '2': '二级',
'3':'三级', '3': '三级',
} }
export default { export default {
@ -165,7 +166,8 @@ export default {
form: {}, form: {},
task: {}, task: {},
rules: {}, rules: {},
levelMap:levelMap base: process.env.VUE_APP_BASE_API,
levelMap: levelMap
} }
}, },
@ -199,23 +201,25 @@ export default {
}, },
uploaddivClick(it) { uploaddivClick(it) {
if (it) { if (it) {
window.location.href=it window.location.href = this.base + it
} }
} }
}, },
created() {}, created() { },
computed: {}, computed: {},
} }
</script> </script>
<style scoped> <style scoped>
.pagedesc >>> .el-descriptions-item__label { .pagedesc>>>.el-descriptions-item__label {
width: 120px !important; width: 120px !important;
} }
.dialogax >>> .el-dialog__body {
.dialogax>>>.el-dialog__body {
height: 600px; height: 600px;
overflow-y: auto; overflow-y: auto;
} }
.uploaddiv { .uploaddiv {
display: flex; display: flex;
align-items: center; align-items: center;
@ -223,6 +227,7 @@ export default {
cursor: pointer; cursor: pointer;
margin-right: 10px; margin-right: 10px;
} }
.uploaddiv img { .uploaddiv img {
width: 15px; width: 15px;
margin-right: 5px; margin-right: 5px;

@ -116,7 +116,8 @@
<div class="toptitle">{{ task.projectName }}</div> <div class="toptitle">{{ task.projectName }}</div>
<div class="topstatus"> <div class="topstatus">
<audit-status :status="task.status"></audit-status> <audit-status :status="task.status"></audit-status>
<el-tag style="margin-left: 10px" size="small" effect="plain"><test-type :type="task.testType"></test-type></el-tag> <el-tag style="margin-left: 10px" size="small" effect="plain"><test-type
:type="task.testType"></test-type></el-tag>
</div> </div>
</div> </div>
<div class="topright"> <div class="topright">
@ -129,8 +130,10 @@
<div class="topstatus"> <div class="topstatus">
<process-status :processStatus="task.processStatus" /> <process-status :processStatus="task.processStatus" />
<!-- <el-tag style="margin-left: 10px" size="small" effect="plain"><test-type :type="task.testType"></test-type></el-tag> --> <!-- <el-tag style="margin-left: 10px" size="small" effect="plain"><test-type :type="task.testType"></test-type></el-tag> -->
<el-tag style="margin-left: 10px" size="small" effect="plain" v-for="it in findLabelValueByProp(tasktypelist, task.testType, 'dictValue', 'dictLabel').split(',')" :key="it"> <el-tag style="margin-left: 10px" size="small" effect="plain"
{{it}} v-for="it in findLabelValueByProp(tasktypelist, task.testType, 'dictValue', 'dictLabel').split(',')"
:key="it">
{{ it }}
</el-tag> </el-tag>
</div> </div>
</div> </div>
@ -199,7 +202,7 @@
<div class="contentinfo"> <div class="contentinfo">
<div class="lefttext">项目附件</div> <div class="lefttext">项目附件</div>
<template v-if="task.attachment"> <template v-if="task.attachment">
<div v-for="(it,index) in task.attachmentArr" :key="it" class="uploaddiv"> <div v-for="(it, index) in task.attachmentArr" :key="it" class="uploaddiv">
<img title="点击下载查看" @click="uploaddivClick(it)" src="@/assets/images/crowd/upload.png" alt=""> <img title="点击下载查看" @click="uploaddivClick(it)" src="@/assets/images/crowd/upload.png" alt="">
<span title="点击下载查看" @click="uploaddivClick(it)">项目附件{{ index + 1 }}</span> <span title="点击下载查看" @click="uploaddivClick(it)">项目附件{{ index + 1 }}</span>
</div> </div>
@ -218,10 +221,10 @@ import OnsiteType from "@/views/components/enum/OnsiteType";
import AuditStatus from "@/views/components/enum/AuditStatus"; import AuditStatus from "@/views/components/enum/AuditStatus";
import mixin from '@/mixin/index.js' import mixin from '@/mixin/index.js'
const levelMap = { const levelMap = {
'0':'无门槛', '0': '无门槛',
'1':'一级', '1': '一级',
'2':'二级', '2': '二级',
'3':'三级', '3': '三级',
} }
export default { export default {
name: "TaskInfo", name: "TaskInfo",
@ -240,7 +243,8 @@ export default {
data() { data() {
return { return {
task: {}, task: {},
levelMap:levelMap base: process.env.VUE_APP_BASE_API,
levelMap: levelMap
}; };
}, },
methods: { methods: {
@ -252,7 +256,7 @@ export default {
}, },
uploaddivClick(it) { uploaddivClick(it) {
if (it) { if (it) {
window.location.href=it window.location.href = this.base + it
} }
} }
}, },
@ -267,12 +271,15 @@ export default {
cursor: pointer; cursor: pointer;
margin-right: 10px; margin-right: 10px;
} }
.uploaddiv img { .uploaddiv img {
width: 15px; width: 15px;
margin-right: 5px; margin-right: 5px;
} }
.taskinfo { .taskinfo {
width: 100%; width: 100%;
// padding: 20px; // padding: 20px;
// box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.3); // box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.3);
.modeltitel { .modeltitel {
@ -282,6 +289,7 @@ export default {
font-size: 20px; font-size: 20px;
font-weight: 700; font-weight: 700;
color: #333333; color: #333333;
.line { .line {
width: 5px; width: 5px;
height: 25px; height: 25px;
@ -289,13 +297,16 @@ export default {
margin-right: 10px; margin-right: 10px;
} }
} }
.taskinfotop { .taskinfotop {
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.topleft { .topleft {
padding: 20px 0; padding: 20px 0;
.toptitle { .toptitle {
font-size: 18px; font-size: 18px;
font-weight: 700; font-weight: 700;
@ -303,17 +314,20 @@ export default {
margin-bottom: 10px; margin-bottom: 10px;
} }
} }
.topright { .topright {
font-size: 18px; font-size: 18px;
font-weight: 700; font-weight: 700;
color: rgb(253, 70, 26); color: rgb(253, 70, 26);
} }
} }
.contentinfo { .contentinfo {
font-size: 16px; font-size: 16px;
color: rgb(128, 128, 128); color: rgb(128, 128, 128);
display: flex; display: flex;
margin-bottom: 10px; margin-bottom: 10px;
.lefttext { .lefttext {
min-width: 100px; min-width: 100px;
} }

@ -313,6 +313,7 @@ export default {
} }
], ],
phonenumber: [ phonenumber: [
{ required: true, message: "手机号码不能为空", trigger: "blur" },
{ {
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码", message: "请输入正确的手机号码",

@ -143,7 +143,8 @@
<el-form v-else :model="form" :rules="rules" ref="form" label-width="120px" inline> <el-form v-else :model="form" :rules="rules" ref="form" label-width="120px" inline>
<!-- 类型 --> <!-- 类型 -->
<el-form-item label="培训班类型" prop="classType"> <el-form-item label="培训班类型" prop="classType">
<el-select v-model="form.classType" @change="classTypeChange"> <el-select v-model="form.classType" @change="classTypeChange" :disabled="classTypeDisabled"
key="class-type">
<el-option label="校企合作班" :value="0"></el-option> <el-option label="校企合作班" :value="0"></el-option>
<el-option label="线下培训进阶班" :value="1"></el-option> <el-option label="线下培训进阶班" :value="1"></el-option>
<el-option label="可靠性人才培训班" :value="2"></el-option> <el-option label="可靠性人才培训班" :value="2"></el-option>
@ -164,7 +165,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="班级代号" prop="trainClassCode" v-if="form.classType == 0"> <el-form-item label="班级代号" prop="trainClassCode" v-if="form.classType == 0">
<el-input v-model="form.trainClassCode" placeholder="请输入班级代号" clearable size="small" /> <el-input v-model="form.trainClassCode" placeholder="请输入班级代号" key="class-code" clearable
size="small" />
</el-form-item> </el-form-item>
<el-form-item label="班级名称" prop="trainClassName"> <el-form-item label="班级名称" prop="trainClassName">
@ -282,7 +284,7 @@ import JsonTool from '@/components/jsonTool'
export default { export default {
name: 'peixunbaoming', name: 'peixunbaoming',
// formatForm // formatForm
components: { ImageUpload, NonimageUpload, JsonTool , }, components: { ImageUpload, NonimageUpload, JsonTool, },
data() { data() {
return { return {
classMap: classMap, classMap: classMap,
@ -345,6 +347,7 @@ export default {
// Json // Json
signTable: false, signTable: false,
activeRowId: '', activeRowId: '',
classTypeDisabled: true
} }
}, },
@ -360,7 +363,81 @@ export default {
this.$refs.jsontool.formatCode() this.$refs.jsontool.formatCode()
} else { } else {
this.$refs.jsontool.jsonData = this.$refs.jsontool.jsonData =
'[{"name":"姓名","type":"input","key":"name","value":""},{"title":"在校职务","type":"input","key":"title","value":""},{"mobile":"手机号","type":"input","key":"mobile","value":""},{"college":"院校全称","type":"input","key":"college","value":""},{"address":"院校所在地址","type":"input","key":"address","value":""},{"payType":"培训付款方式","type":"radio","key":"payType","value":["公对公转账,请于报到前提供截图","现场支付(公务卡、微信、支付宝、现金)"]},{"sex":"性别","type":"radio","key":"sex","value":["男","女"]},{"hotel":"是否需要统一安排住宿","type":"radio","key":"hotel","value":["大床房(付房费全额)","标间(独立居住、付全额房费)","标间(拼房、付房费一半),无指定合住人员","标间(拼房、付房费一半),指定合住人员","其他,请说明,包括非指定日期的订房","无须订房,自行安排"]},{"addWeixin":"是否添加业务负责人微信","type":"radio","key":"addWeixin","value":["是","否"]},{"suggestion":"针对此次培训,您还有什么建议","type":"textarea","key":"suggestion","value":""}]' `
[
{
"name":"姓名",
"type":"input",
"key":"name",
"value":""
},
{
"title":"在校职务",
"type":"input",
"key":"title",
"value":""
},
{
"mobile":"手机号",
"type":"input",
"key":"mobile",
"value":""
},
{
"college":"院校全称",
"type":"input",
"key":"college",
"value":""
},
{
"address":"院校所在地址",
"type":"input",
"key":"address",
"value":""
},
{
"payType":"培训付款方式",
"type":"radio",
"key":"payType",
"value":[
"公对公转账,请于报到前提供截图",
"现场支付(公务卡、微信、支付宝、现金)"]
},
{
"sex":"性别",
"type":"radio",
"key":"sex",
"value":[
"男",
"女"]
},
{
"hotel":"是否需要统一安排住宿",
"type":"radio",
"key":"hotel",
"value":[
"大床房(付房费全额)",
"标间(独立居住、付全额房费)",
"标间(拼房、付房费一半),无指定合住人员",
"标间(拼房、付房费一半),指定合住人员",
"其他,请说明,包括非指定日期的订房",
"无须订房,自行安排"]
},
{
"addWeixin":"是否添加业务负责人微信",
"type":"radio",
"key":"addWeixin",
"value":[
"是",
"否"]
},
{
"suggestion":"针对此次培训,您还有什么建议",
"type":"textarea",
"key":"suggestion",
"value":""
}]
`
this.$refs.jsontool.formatCode() this.$refs.jsontool.formatCode()
} }
this.$refs.jsontool.formatCode() this.$refs.jsontool.formatCode()
@ -429,6 +506,7 @@ export default {
async modify(row) { async modify(row) {
this.title = '修改班级' this.title = '修改班级'
this.form = JSON.parse(JSON.stringify(row)) this.form = JSON.parse(JSON.stringify(row))
// this.classTypeDisabled = true
// 线 // 线
if (row.classType == 4) { if (row.classType == 4) {
this.rules.trainStartTime = [] this.rules.trainStartTime = []
@ -532,6 +610,7 @@ export default {
}, },
// //
colsedia() { colsedia() {
// this.classTypeDisabled = false
this.$refs['form']?.resetFields() this.$refs['form']?.resetFields()
this.$refs['copyClassForm']?.resetFields() this.$refs['copyClassForm']?.resetFields()
this.copyClassForm = { this.copyClassForm = {

Loading…
Cancel
Save