项目管理

main
cc 2024-03-23 04:52:35 +00:00
parent ab1d04c72d
commit 2f1a032818
3 changed files with 140 additions and 58 deletions

View File

@ -11,7 +11,7 @@
<p>{{ item.name }}</p> <p>{{ item.name }}</p>
<p>{{ item.description }}</p> <p>{{ item.description }}</p>
<p>{{ item.content }}</p> <p>{{ item.content }}</p>
<el-button type="primary">管理</el-button> <el-button type="primary" @click="router.push({ name: 'room', query: { project_name: item.name }})">管理</el-button>
<el-button type="success" @click="openUpdateDialog(item)"></el-button> <el-button type="success" @click="openUpdateDialog(item)"></el-button>
<el-button type="danger" @click="openRemove(item)"></el-button> <el-button type="danger" @click="openRemove(item)"></el-button>
</el-card> </el-card>
@ -57,14 +57,11 @@ import { onMounted, reactive, ref } from "vue";
import { Plus } from "@element-plus/icons-vue"; import { Plus } from "@element-plus/icons-vue";
import { ElMessage,ElMessageBox } from "element-plus"; import { ElMessage,ElMessageBox } from "element-plus";
import myApi from "@/api/myApi.js"; import myApi from "@/api/myApi.js";
import axios from "axios"; import { useRouter } from 'vue-router'
const projects = ref(); const router = useRouter()
const projects = ref([]);
onMounted(() => {
get_projects();
})
const get_projects = async () => { const get_projects = async () => {
const param = { const param = {
@ -94,6 +91,7 @@ const add_project_info = reactive({
name: "", name: "",
description: "", description: "",
}); });
const add_project = async () => { const add_project = async () => {
const param = { const param = {
action: 101, action: 101,

View File

@ -1,17 +1,18 @@
<template> <template>
{{ project_name }}
<div class="room-div"> <div class="room-div">
<el-card> <el-card>
<div> <div>
<el-button type="primary">项目管理</el-button> <el-button type="primary" @click="router.push('home')"></el-button>
<el-button type="success">项目预览</el-button> <el-button type="success">项目预览</el-button>
</div> </div>
<div> <div>
<el-button type="primary" class="add-btn" :icon="Plus" @click="addRoom"></el-button> <el-button type="primary" class="add-btn" :icon="Plus" @click="addRoom"></el-button>
</div> </div>
<div class="room-list"> <div class="room-list">
<div v-for="(item, index) in room_data.list" :key="index" class="room-span"> <div v-for="(item, index) in project.content" :key="index" class="room-span">
<span>{{ item.name }}</span> <span>{{ item.room_name }}</span>
<span>{{ item.number }}</span> <span>{{ item.room_count }}</span>
<el-button type="danger" :icon="Delete" circle /> <el-button type="danger" :icon="Delete" circle />
</div> </div>
</div> </div>
@ -23,11 +24,8 @@
<div class="div300"> <div class="div300">
<span>房型名称</span> <span>房型名称</span>
<el-select v-model="form.roomName" placeholder="请选择"> <el-select v-model="form.roomName" placeholder="请选择">
<el-option <el-option v-for="item in options" :key="item.value" :label="item.label"
v-for="item in options" :value="item.value">
:key="item.value"
:label="item.label"
:value="item.value">
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
@ -40,7 +38,7 @@
<div class="div-2"> <div class="div-2">
<span class="name name2">灯光信息</span> <span class="name name2">灯光信息</span>
<div class="flex-center bar"> <div class="flex-center bar">
<div v-for="(item,i) in lightArr" :key="item.label"> <div v-for="(item, i) in lightArr" :key="item.label">
<p>{{ item.label }}</p> <p>{{ item.label }}</p>
<p> <p>
<el-input-number v-model="form.num100" :min="1" :max="100"></el-input-number> <el-input-number v-model="form.num100" :min="1" :max="100"></el-input-number>
@ -53,13 +51,16 @@
<div class="flex-center bar"> <div class="flex-center bar">
<div>盘管类型</div> <div>盘管类型</div>
<el-radio-group v-model="form.type1"> <el-radio-group v-model="form.type1">
<el-radio :label="item.value" :key="item.value" v-for="(item,index) in radioGroup1">{{item.label}}</el-radio> <el-radio :label="item.value" :key="item.value"
v-for="(item, index) in radioGroup1">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
<el-radio-group v-model="form.type2"> <el-radio-group v-model="form.type2">
<el-radio :label="item.value" :key="item.value" v-for="(item,index) in radioGroup2">{{item.label}}</el-radio> <el-radio :label="item.value" :key="item.value"
v-for="(item, index) in radioGroup2">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
<el-radio-group v-model="form.type3"> <el-radio-group v-model="form.type3">
<el-radio :label="item.value" :key="item.value" v-for="(item,index) in radioGroup3">{{item.label}}</el-radio> <el-radio :label="item.value" :key="item.value"
v-for="(item, index) in radioGroup3">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
<div> <div>
<p>温控器数量</p> <p>温控器数量</p>
@ -74,7 +75,8 @@
<div class="flex-center bar"> <div class="flex-center bar">
<div>面板类型</div> <div>面板类型</div>
<el-radio-group v-model="form.type4"> <el-radio-group v-model="form.type4">
<el-radio :label="item.value" :key="item.value" v-for="(item,index) in radioGroup4">{{item.label}}</el-radio> <el-radio :label="item.value" :key="item.value"
v-for="(item, index) in radioGroup4">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
<div> <div>
<p>面板数量</p> <p>面板数量</p>
@ -95,7 +97,8 @@
<div class="flex-center bar"> <div class="flex-center bar">
<div>窗帘类型</div> <div>窗帘类型</div>
<el-radio-group v-model="form.type5"> <el-radio-group v-model="form.type5">
<el-radio :label="item.value" :key="item.value" v-for="(item,index) in radioGroup5">{{item.label}}</el-radio> <el-radio :label="item.value" :key="item.value"
v-for="(item, index) in radioGroup5">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
<div> <div>
<p>窗帘数量</p> <p>窗帘数量</p>
@ -115,7 +118,7 @@
<span class="name name6">其他信息</span> <span class="name name6">其他信息</span>
<div class="con-div"> <div class="con-div">
<div class="flex-center bar"> <div class="flex-center bar">
<div v-for="(item,i) in otherArr" :key="item.label"> <div v-for="(item, i) in otherArr" :key="item.label">
<p>{{ item.label }}</p> <p>{{ item.label }}</p>
<p> <p>
<el-input-number v-model="form.num101" :min="1" :max="100"></el-input-number> <el-input-number v-model="form.num101" :min="1" :max="100"></el-input-number>
@ -123,8 +126,9 @@
</div> </div>
</div> </div>
<el-checkbox-group v-model="form.checkone" class="rules-label" > <el-checkbox-group v-model="form.checkone" class="rules-label">
<el-checkbox v-for="(item,i) in checkList" :label="item.label" :key="item.value" :value="item.value" > <el-checkbox v-for="(item, i) in checkList" :label="item.label" :key="item.value"
:value="item.value">
{{ item.label }} {{ item.label }}
</el-checkbox> </el-checkbox>
</el-checkbox-group> </el-checkbox-group>
@ -144,9 +148,64 @@
</template> </template>
<script setup> <script setup>
import { Delete } from '@element-plus/icons-vue' import { Delete } from '@element-plus/icons-vue'
import { ref, reactive } from 'vue' import { onMounted, ref, reactive } from 'vue'
import { usrRoomStore } from '../store/project' import { usrRoomStore } from '../store/project'
import { Plus } from '@element-plus/icons-vue' import { Plus } from '@element-plus/icons-vue'
import myApi from "@/api/myApi.js";
import { useRoute, useRouter } from 'vue-router'
const router = useRouter()
const route = useRoute()
const project = reactive({
name: "",
description: "",
content: [],
});
const get_project = async () => {
const param = {
action: 100,
data: {
name: route.query.project_name,
}
}
const res = await myApi.getProjects(param);
if (res.code === 0) {
project.name = res.data.name;
project.description = res.data.description;
if (Array.isArray(res.data.content)) {
project.content = res.data.content;
}
} else {
ElMessage({
message: res.message,
type: "warning",
});
}
}
onMounted(() => {
get_project();
if (project.content.length ===0) {
add_room();
}
});
const room_info = reactive({
room_name: '',
room_count: 1,
})
const add_room = () => {
if (!Array.isArray(project.content)) {
project.content = []
}
room_info.room_name = "房型" + (project.content.length + 1);
room_info.room_count = 1;
project.content.push(room_info)
}
const room_data = usrRoomStore(); const room_data = usrRoomStore();
const new_room = reactive({ const new_room = reactive({
@ -157,7 +216,7 @@ const new_room = reactive({
const options = reactive([{ const options = reactive([{
label: '房型A', label: '房型A',
value: 1, value: 1,
},{ }, {
label: '房型B', label: '房型B',
value: 2, value: 2,
}]) }])
@ -176,89 +235,89 @@ const form = reactive({
chlnum: 0, chlnum: 0,
chshnum: 0, chshnum: 0,
checkone: [], checkone: [],
desc:'' desc: ''
}) })
const lightArr = reactive([{ const lightArr = reactive([{
label: '开关回路', label: '开关回路',
value: 1, value: 1,
},{ }, {
label: '0-10V调光', label: '0-10V调光',
value: 2, value: 2,
},{ }, {
label: '前沿调光', label: '前沿调光',
value: 3, value: 3,
},{ }, {
label: '后沿调光', label: '后沿调光',
value: 4, value: 4,
},{ }, {
label: 'DALI灯', label: 'DALI灯',
value: 5, value: 5,
}]) }])
const otherArr = reactive([{ const otherArr = reactive([{
label: '红外', label: '红外',
value: 1, value: 1,
},{ }, {
label: '双鉴红外', label: '双鉴红外',
value: 2, value: 2,
},{ }, {
label: '门磁', label: '门磁',
value: 3, value: 3,
},{ }, {
label: '窗磁', label: '窗磁',
value: 4, value: 4,
},{ }, {
label: '门铃', label: '门铃',
value: 5, value: 5,
}]) }])
const radioGroup1 = reactive([{ const radioGroup1 = reactive([{
label: '普通三速风机', label: '普通三速风机',
value: 1, value: 1,
},{ }, {
label: '直流无刷风机', label: '直流无刷风机',
value: 2, value: 2,
},{ }, {
label: '三方协议风机', label: '三方协议风机',
value: 3, value: 3,
}]) }])
const radioGroup2 = reactive([{ const radioGroup2 = reactive([{
label: '两管制', label: '两管制',
value: 4, value: 4,
},{ }, {
label: '四管制', label: '四管制',
value: 5, value: 5,
}]) }])
const radioGroup3 = reactive([{ const radioGroup3 = reactive([{
label: '两通阀', label: '两通阀',
value: 6, value: 6,
},{ }, {
label: '调节阀', label: '调节阀',
value: 7, value: 7,
}]) }])
const radioGroup4 = reactive([{ const radioGroup4 = reactive([{
label: '普通面板(无背光)', label: '普通面板(无背光)',
value: 8, value: 8,
},{ }, {
label: '普通面板(带背光)', label: '普通面板(带背光)',
value: 9, value: 9,
},{ }, {
label: '协议面板', label: '协议面板',
value: 10, value: 10,
}]) }])
const radioGroup5 = reactive([{ const radioGroup5 = reactive([{
label: '干接点电机', label: '干接点电机',
value: 11, value: 11,
},{ }, {
label: '485电机', label: '485电机',
value: 12, value: 12,
}]) }])
const checkList = reactive([{ const checkList = reactive([{
label: 'DND', label: 'DND',
value: 11, value: 11,
},{ }, {
label: 'MUR', label: 'MUR',
value: 12, value: 12,
},{ }, {
label: 'SOS', label: 'SOS',
value: 13, value: 13,
}]) }])
@ -284,7 +343,7 @@ const check = () => {
::v-deep .el-card__body { ::v-deep .el-card__body {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height:95%; height: 95%;
>div { >div {
margin: 10px 0; margin: 10px 0;
@ -317,39 +376,47 @@ const check = () => {
::v-deep .el-card__body { ::v-deep .el-card__body {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height:95%; height: 95%;
justify-content: space-between; justify-content: space-between;
>div { >div {
border: 1px solid #ddd; border: 1px solid #ddd;
display: flex; display: flex;
border-radius: 8px; border-radius: 8px;
.name { .name {
width: 50px; width: 50px;
color:#fff; color: #fff;
font-size: 18px; font-size: 18px;
justify-content: center; justify-content: center;
display: flex; display: flex;
align-items: center; align-items: center;
} }
.name1 { .name1 {
background: #de868f; background: #de868f;
} }
.name2 { .name2 {
background: #e99d42; background: #e99d42;
} }
.name3 { .name3 {
background: #cba43f; background: #cba43f;
} }
.name4 { .name4 {
background: #bfbf3d; background: #bfbf3d;
} }
.name5 { .name5 {
background: #54bcbd; background: #54bcbd;
} }
.name6 { .name6 {
background: #e99d42; background: #e99d42;
} }
.name7 { .name7 {
background: #cd42e9; background: #cd42e9;
} }
@ -358,27 +425,35 @@ const check = () => {
.div-1 { .div-1 {
height: 10%; height: 10%;
} }
.div-2 { .div-2 {
height: 12%; height: 12%;
} }
.div-3 { .div-3 {
height: 12%; height: 12%;
} }
.div-4 { .div-4 {
height: 12%; height: 12%;
} }
.div-5 { .div-5 {
height: 12%; height: 12%;
} }
.div-6 { .div-6 {
height: 20%; height: 20%;
} }
.div-7 { .div-7 {
height: 15%; height: 15%;
} }
.el-radio-group { .el-radio-group {
width: 160px !important; width: 160px !important;
display: flex; display: flex;
.el-radio { .el-radio {
width: 100%; width: 100%;
} }
@ -387,35 +462,43 @@ const check = () => {
.con-div { .con-div {
display: flex; display: flex;
justify-content:space-around; justify-content: space-around;
flex-direction: column; flex-direction: column;
} }
.con-div100 { .con-div100 {
width: 96%; width: 96%;
height: 100%; height: 100%;
padding: 5px; padding: 5px;
} }
::v-deep .el-textarea__inner { ::v-deep .el-textarea__inner {
height: 80px !important; height: 80px !important;
} }
p { p {
margin: 8px; margin: 8px;
} }
.bar{
.bar {
width: 100%; width: 100%;
padding: 10px; padding: 10px;
>div { >div {
margin-right: 10px; margin-right: 10px;
} }
} }
.div300 { .div300 {
width: 300px; width: 300px;
display: flex; display: flex;
align-items: center; align-items: center;
span { span {
flex-shrink: 0; flex-shrink: 0;
} }
} }
} }
}</style> }
</style>

View File

@ -15,6 +15,7 @@ export default defineConfig({
proxy: { proxy: {
'/api': { '/api': {
target: 'http://api.shikicc.com:58909', target: 'http://api.shikicc.com:58909',
// target: 'http://10.10.10.4:3000',
changeOrigin: true, changeOrigin: true,
rewrite: path => path.replace(/^\/api/, '/api') rewrite: path => path.replace(/^\/api/, '/api')
} }