合并
This commit is contained in:
@ -155,7 +155,7 @@ export const coryEngineeringList = (query: any): AxiosPromise<any[]> => {
|
|||||||
*/
|
*/
|
||||||
export const obtainTheVersion = (query: any) => {
|
export const obtainTheVersion = (query: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/cailiaoshebei/mrpBase/obtainTheVersion',
|
url: '/design/billofquantitiesVersions/obtainAllClassification',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: query
|
params: query
|
||||||
});
|
});
|
||||||
|
|||||||
@ -66,6 +66,7 @@ export interface ConstructionSchedulePlanForm extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
id?: string | number;
|
id?: string | number;
|
||||||
parentId?: string | number;
|
parentId?: string | number;
|
||||||
|
projectStructureName?: string;
|
||||||
/**
|
/**
|
||||||
* 项目ID
|
* 项目ID
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -212,5 +212,50 @@ export function download(url: string, params: any, fileName: string, isHeader?:
|
|||||||
downloadLoadingInstance.close();
|
downloadLoadingInstance.close();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* GET 下载方法
|
||||||
|
* @param url 请求地址
|
||||||
|
* @param params 请求参数
|
||||||
|
* @param fileName 保存文件名
|
||||||
|
* @param isHeader 是否使用 json header
|
||||||
|
*/
|
||||||
|
export function downloadGet(url: string, params: any, fileName: string, isHeader?: boolean) {
|
||||||
|
downloadLoadingInstance = ElLoading.service({
|
||||||
|
text: '正在下载数据,请稍候',
|
||||||
|
background: 'rgba(0, 0, 0, 0.7)'
|
||||||
|
});
|
||||||
|
|
||||||
|
// 拼接参数
|
||||||
|
let query = tansParams(params);
|
||||||
|
if (query) {
|
||||||
|
url += '?' + query;
|
||||||
|
}
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
headers: isHeader ? { 'Content-Type': 'application/json' } : { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||||
|
responseType: 'blob' as const
|
||||||
|
};
|
||||||
|
|
||||||
|
return service
|
||||||
|
.get(url, config)
|
||||||
|
.then(async (resp: any) => {
|
||||||
|
const isLogin = blobValidate(resp);
|
||||||
|
if (isLogin) {
|
||||||
|
const blob = new Blob([resp]);
|
||||||
|
FileSaver.saveAs(blob, fileName);
|
||||||
|
} else {
|
||||||
|
const resText = await resp.data.text();
|
||||||
|
const rspObj = JSON.parse(resText);
|
||||||
|
const errMsg = (rspObj && (rspObj.msg || rspObj.message)) || '下载失败';
|
||||||
|
ElMessage.error(errMsg);
|
||||||
|
}
|
||||||
|
downloadLoadingInstance.close();
|
||||||
|
})
|
||||||
|
.catch((err: any) => {
|
||||||
|
console.error(err);
|
||||||
|
ElMessage.error('下载文件出现错误,请联系管理员!');
|
||||||
|
downloadLoadingInstance.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
// 导出 axios 实例
|
// 导出 axios 实例
|
||||||
export default service;
|
export default service;
|
||||||
|
|||||||
@ -74,6 +74,11 @@ export const formatPrice = (price, show = true) => {
|
|||||||
const fixedNum = num.toFixed(4);
|
const fixedNum = num.toFixed(4);
|
||||||
const [integer, decimal] = fixedNum.split('.');
|
const [integer, decimal] = fixedNum.split('.');
|
||||||
|
|
||||||
|
// 检查小数部分是否为0
|
||||||
|
if (decimal === '0000') {
|
||||||
|
return `${integer}.00`;
|
||||||
|
}
|
||||||
|
|
||||||
// 千分位处理
|
// 千分位处理
|
||||||
const formattedInteger = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
const formattedInteger = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
v-for="(item, i) in weatherList"
|
v-for="(item, i) in weatherList"
|
||||||
:key="i"
|
:key="i"
|
||||||
class="weather-item"
|
class="weather-item"
|
||||||
:style="{ transform: `translateY(-${offsetY}px)`, transition: transition }"
|
:style="{ transform: `translateY(-${offsetY}vw)`, transition: transition }"
|
||||||
>
|
>
|
||||||
<img :src="`/assets/demo/${item.icon}.png`" alt="" />
|
<img :src="`/assets/demo/${item.icon}.png`" alt="" />
|
||||||
<div>{{ item.weather }}{{ item.tempMin }}°/{{ item.tempMax }}°</div>
|
<div>{{ item.weather }}{{ item.tempMin }}°/{{ item.tempMax }}°</div>
|
||||||
@ -39,7 +39,7 @@
|
|||||||
<!-- 右侧:管理系统图标 + 文字 -->
|
<!-- 右侧:管理系统图标 + 文字 -->
|
||||||
<div class="right-section">
|
<div class="right-section">
|
||||||
<img src="@/assets/large/setting.png" alt="设置图标" />
|
<img src="@/assets/large/setting.png" alt="设置图标" />
|
||||||
<span>管理系统</span>
|
<span style="width: 5vw">管理系统</span>
|
||||||
</div>
|
</div>
|
||||||
<!-- 分割线 -->
|
<!-- 分割线 -->
|
||||||
<div class="divider">
|
<div class="divider">
|
||||||
@ -89,7 +89,7 @@ const emit = defineEmits(['changePage']);
|
|||||||
const safetyDay = ref<number>(0);
|
const safetyDay = ref<number>(0);
|
||||||
const weatherList = ref<Weather[]>([]);
|
const weatherList = ref<Weather[]>([]);
|
||||||
const timer = ref<number | null>(0);
|
const timer = ref<number | null>(0);
|
||||||
const offsetY = ref<number>(0);
|
const offsetY = ref<any>(0);
|
||||||
const curIndex = ref(0);
|
const curIndex = ref(0);
|
||||||
const transition = ref('transform 0.5s ease');
|
const transition = ref('transform 0.5s ease');
|
||||||
const pendingPause = ref(false);
|
const pendingPause = ref(false);
|
||||||
@ -119,7 +119,7 @@ function judgeDayOrNight(sunRise: string, sunSet: string) {
|
|||||||
const setWeatherScroll = () => {
|
const setWeatherScroll = () => {
|
||||||
curIndex.value += 1;
|
curIndex.value += 1;
|
||||||
transition.value = 'transform 0.3s ease';
|
transition.value = 'transform 0.3s ease';
|
||||||
offsetY.value = curIndex.value * 60;
|
offsetY.value = curIndex.value * 2;
|
||||||
|
|
||||||
if (curIndex.value === weatherList.value.length - 1) {
|
if (curIndex.value === weatherList.value.length - 1) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@ -232,13 +232,13 @@ onUnmounted(() => {
|
|||||||
|
|
||||||
.title > div:first-child {
|
.title > div:first-child {
|
||||||
/* 第一个子元素的样式 */
|
/* 第一个子元素的样式 */
|
||||||
font-size: 38px;
|
font-size: 2vw;
|
||||||
letter-spacing: 0.1em;
|
letter-spacing: 0.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title > div:last-child {
|
.title > div:last-child {
|
||||||
/* 最后一个子元素的样式 */
|
/* 最后一个子元素的样式 */
|
||||||
font-size: 14px;
|
font-size: 1vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 顶部栏容器:Flex 水平布局 + 垂直居中 */
|
/* 顶部栏容器:Flex 水平布局 + 垂直居中 */
|
||||||
@ -260,22 +260,25 @@ onUnmounted(() => {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.weather-list {
|
.weather-list {
|
||||||
height: 60px;
|
height: 2vw;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
.weather-item {
|
.weather-item {
|
||||||
height: 60px;
|
height: 2vw;
|
||||||
line-height: 60px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
// padding: 10px 0;
|
||||||
|
// box-sizing: border-box;
|
||||||
|
font-size: 0.8vw;
|
||||||
|
|
||||||
& > div:last-child {
|
& > div:last-child {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 50px;
|
width: 3vw;
|
||||||
height: 50px;
|
height: 3vw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -305,10 +308,12 @@ onUnmounted(() => {
|
|||||||
|
|
||||||
/* 右侧区域(管理系统):图标 + 文字水平排列 */
|
/* 右侧区域(管理系统):图标 + 文字水平排列 */
|
||||||
.right-section {
|
.right-section {
|
||||||
|
width: 5.5vw;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
font-family: 'AlimamaShuHeiTi', sans-serif;
|
font-family: 'AlimamaShuHeiTi', sans-serif;
|
||||||
font-size: 20px;
|
font-size: 1vw;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -67,6 +67,17 @@
|
|||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</span>
|
</span>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<!-- <el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
icon="Delete"
|
||||||
|
:disabled="multiple"
|
||||||
|
@click="handleDelete()"
|
||||||
|
v-hasPermi="['formalities:formalitiesAreConsolidated:remove']"
|
||||||
|
>删除</el-button
|
||||||
|
>
|
||||||
|
</el-col> -->
|
||||||
<!-- <el-col :span="1.5">
|
<!-- <el-col :span="1.5">
|
||||||
<el-button
|
<el-button
|
||||||
type="success"
|
type="success"
|
||||||
@ -93,7 +104,7 @@
|
|||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="手续办理清单" align="left" prop="formalitiesName">
|
<el-table-column label="手续办理清单" align="left" prop="formalitiesName">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div>{{ scope.row.formalitiesName }}</div>
|
{{ scope.row.formalitiesName }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="计划开始时间" align="center" prop="planTheStartTime" width="180">
|
<el-table-column label="计划开始时间" align="center" prop="planTheStartTime" width="180">
|
||||||
@ -130,7 +141,7 @@
|
|||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
<el-table-column label="操作" align="center" fixed="right">
|
<el-table-column label="操作" align="center" fixed="right">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div v-if="scope.row.formalitiesPid">
|
<div v-if="scope.row.formalitiesPid && scope.row.processingStatus != '不需要办理'">
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
@ -151,6 +162,9 @@
|
|||||||
v-hasPermi="['formalities:formalitiesAreConsolidated:edit']"
|
v-hasPermi="['formalities:formalitiesAreConsolidated:edit']"
|
||||||
>修改状态</el-button
|
>修改状态</el-button
|
||||||
>
|
>
|
||||||
|
<!-- <el-button link type="danger" icon="Delete" v-if="scope.row.processingStatus == '待开始'" @click="handleDelete(scope.row)"
|
||||||
|
>删除</el-button
|
||||||
|
> -->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -242,6 +256,7 @@
|
|||||||
<el-option label="待开始" value="待开始" />
|
<el-option label="待开始" value="待开始" />
|
||||||
<el-option label="处理中" value="处理中" />
|
<el-option label="处理中" value="处理中" />
|
||||||
<el-option label="已完成" value="已完成" />
|
<el-option label="已完成" value="已完成" />
|
||||||
|
<el-option label="不需要办理" value="不需要办理" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
@ -546,6 +561,16 @@ const handleUpdateStatus = async (row?: FormalitiesAreConsolidatedVO) => {
|
|||||||
updateStatusVisible.value = true;
|
updateStatusVisible.value = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleDelete = async (row?: any) => {
|
||||||
|
const _ids = row?.id || ids.value;
|
||||||
|
await proxy?.$modal.confirm('是否确认删除数据项?').finally(() => (fileLoading.value = false));
|
||||||
|
fileLoading.value = true;
|
||||||
|
|
||||||
|
await delFormalitiesAreConsolidated(_ids);
|
||||||
|
proxy?.$modal.msgSuccess('删除成功');
|
||||||
|
await getList();
|
||||||
|
};
|
||||||
|
|
||||||
const submitStatus = async () => {
|
const submitStatus = async () => {
|
||||||
statusFormRef.value?.validate(async (valid: boolean) => {
|
statusFormRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
v-for="(item, i) in weatherList"
|
v-for="(item, i) in weatherList"
|
||||||
:key="i"
|
:key="i"
|
||||||
class="weather-item"
|
class="weather-item"
|
||||||
:style="{ transform: `translateY(-${offsetY}px)`, transition: transition }"
|
:style="{ transform: `translateY(-${offsetY}vw)`, transition: transition }"
|
||||||
>
|
>
|
||||||
<img :src="`/assets/demo/${item.icon}.png`" alt="" />
|
<img :src="`/assets/demo/${item.icon}.png`" alt="" />
|
||||||
<div>{{ item.weather }}{{ item.tempMin }}°/{{ item.tempMax }}°</div>
|
<div>{{ item.weather }}{{ item.tempMin }}°/{{ item.tempMax }}°</div>
|
||||||
@ -79,7 +79,7 @@ const userStore = useUserStoreHook();
|
|||||||
const currentProject = computed(() => userStore.selectedProject);
|
const currentProject = computed(() => userStore.selectedProject);
|
||||||
|
|
||||||
// 天气轮播相关变量
|
// 天气轮播相关变量
|
||||||
const weatherList = ref<WeatherData[]>([]);
|
const weatherList = ref<any[]>([]);
|
||||||
const offsetY = ref<number>(0);
|
const offsetY = ref<number>(0);
|
||||||
const curIndex = ref(0);
|
const curIndex = ref(0);
|
||||||
const transition = ref('transform 0.5s ease');
|
const transition = ref('transform 0.5s ease');
|
||||||
@ -103,7 +103,7 @@ function judgeDayOrNight(sunRise: string, sunSet: string) {
|
|||||||
const setWeatherScroll = () => {
|
const setWeatherScroll = () => {
|
||||||
curIndex.value += 1;
|
curIndex.value += 1;
|
||||||
transition.value = 'transform 0.3s ease';
|
transition.value = 'transform 0.3s ease';
|
||||||
offsetY.value = curIndex.value * 60; // 每个天气项高度60px,需和样式一致
|
offsetY.value = curIndex.value * 2; // 每个天气项高度60px,需和样式一致
|
||||||
|
|
||||||
// 轮播到最后一项时,无缝衔接回第一项
|
// 轮播到最后一项时,无缝衔接回第一项
|
||||||
if (curIndex.value === weatherList.value.length - 1) {
|
if (curIndex.value === weatherList.value.length - 1) {
|
||||||
@ -160,7 +160,7 @@ const getWeatherData = async () => {
|
|||||||
weatherList.value = res.data;
|
weatherList.value = res.data;
|
||||||
|
|
||||||
// 处理每一天的天气(白天/夜晚切换图标和状态)
|
// 处理每一天的天气(白天/夜晚切换图标和状态)
|
||||||
weatherList.value.forEach((item) => {
|
weatherList.value.forEach((item: any) => {
|
||||||
const isDay = judgeDayOrNight(item.sunRise, item.sunSet);
|
const isDay = judgeDayOrNight(item.sunRise, item.sunSet);
|
||||||
item.status = isDay ? item.dayStatus : item.nightStatus;
|
item.status = isDay ? item.dayStatus : item.nightStatus;
|
||||||
item.icon = isDay ? item.dayIcon : item.nightIcon;
|
item.icon = isDay ? item.dayIcon : item.nightIcon;
|
||||||
@ -250,13 +250,13 @@ onUnmounted(() => {
|
|||||||
|
|
||||||
.title > div:first-child {
|
.title > div:first-child {
|
||||||
/* 第一个子元素的样式 */
|
/* 第一个子元素的样式 */
|
||||||
font-size: 38px;
|
font-size: 2vw;
|
||||||
letter-spacing: 0.1em;
|
letter-spacing: 0.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title > div:last-child {
|
.title > div:last-child {
|
||||||
/* 最后一个子元素的样式 */
|
/* 最后一个子元素的样式 */
|
||||||
font-size: 14px;
|
font-size: 1vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 顶部栏容器:Flex 水平布局 + 垂直居中 */
|
/* 顶部栏容器:Flex 水平布局 + 垂直居中 */
|
||||||
@ -278,22 +278,25 @@ onUnmounted(() => {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.weather-list {
|
.weather-list {
|
||||||
height: 60px;
|
height: 2vw;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
.weather-item {
|
.weather-item {
|
||||||
height: 60px;
|
height: 2vw;
|
||||||
line-height: 60px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
// padding: 10px 0;
|
||||||
|
// box-sizing: border-box;
|
||||||
|
font-size: 0.8vw;
|
||||||
|
|
||||||
& > div:last-child {
|
& > div:last-child {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 50px;
|
width: 3vw;
|
||||||
height: 50px;
|
height: 3vw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -323,10 +326,12 @@ onUnmounted(() => {
|
|||||||
|
|
||||||
/* 右侧区域(管理系统):图标 + 文字水平排列 */
|
/* 右侧区域(管理系统):图标 + 文字水平排列 */
|
||||||
.right-section {
|
.right-section {
|
||||||
|
width: 5.5vw;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
font-family: 'AlimamaShuHeiTi', sans-serif;
|
font-family: 'AlimamaShuHeiTi', sans-serif;
|
||||||
font-size: 20px;
|
font-size: 1vw;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -117,7 +117,7 @@
|
|||||||
<el-table-column prop="batchNumber" align="center" label="版本号 " width="200">
|
<el-table-column prop="batchNumber" align="center" label="版本号 " width="200">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-select v-model="scope.row.batchNumber" placeholder="请选择" @change="(val) => selectNameVersion(val, scope.row, scope.$index)">
|
<el-select v-model="scope.row.batchNumber" placeholder="请选择" @change="(val) => selectNameVersion(val, scope.row, scope.$index)">
|
||||||
<el-option v-for="item in versionList" :key="item.versions" :label="item.versions" :value="item.versions" />
|
<el-option v-for="item in versionList" :key="item.versions" :label="item.name" :value="item.sid" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -692,10 +692,10 @@ const handleAudit = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** 获取物资列表(按版本号筛选) */
|
/** 获取物资列表(按版本号筛选) */
|
||||||
const getNameList = (versions: string) => {
|
const getNameList = (sid: string) => {
|
||||||
coryEngineeringList({
|
coryEngineeringList({
|
||||||
projectId: currentProject.value?.id,
|
projectId: currentProject.value?.id,
|
||||||
versions
|
sid
|
||||||
})
|
})
|
||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
nameList.value = res.data || [];
|
nameList.value = res.data || [];
|
||||||
@ -750,7 +750,7 @@ const listeningProject = watch(
|
|||||||
if (newId !== oldId && newId) {
|
if (newId !== oldId && newId) {
|
||||||
queryParams.value.mainData.projectId = newId;
|
queryParams.value.mainData.projectId = newId;
|
||||||
queryParams.value.batchData.projectId = newId;
|
queryParams.value.batchData.projectId = newId;
|
||||||
form.value.mrpBaseBo.projectId = newId;
|
form.value.mrpBaseBo.projectId = newId as number;
|
||||||
getList();
|
getList();
|
||||||
getVersion(); // 重新获取对应项目的版本号
|
getVersion(); // 重新获取对应项目的版本号
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,21 @@
|
|||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['progress:constructionSchedulePlan:add']">新增</el-button>
|
<el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['progress:constructionSchedulePlan:add']">新增</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<file-upload
|
||||||
|
upload-url="/progress/constructionSchedulePlan/readTemplate"
|
||||||
|
v-model="file"
|
||||||
|
:limit="1"
|
||||||
|
:data="{ projectId: queryParams.projectId }"
|
||||||
|
:file-type="['xls', 'xlsx']"
|
||||||
|
:on-upload-success="handleSuccess"
|
||||||
|
>
|
||||||
|
<el-button type="primary" plain icon="upload">导入</el-button>
|
||||||
|
</file-upload>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Filter" @click="handleExport">导出</el-button>
|
||||||
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
|
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -126,22 +141,10 @@
|
|||||||
<el-date-picker clearable v-model="form.planEndDate" type="date" value-format="YYYY-MM-DD" placeholder="选择预计结束时间" />
|
<el-date-picker clearable v-model="form.planEndDate" type="date" value-format="YYYY-MM-DD" placeholder="选择预计结束时间" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="实际开始时间" prop="practicalStartDate">
|
<el-form-item label="实际开始时间" prop="practicalStartDate">
|
||||||
<el-date-picker
|
<el-date-picker clearable v-model="form.practicalStartDate" type="date" value-format="YYYY-MM-DD" placeholder="选择实际开始时间" />
|
||||||
clearable
|
|
||||||
v-model="form.practicalStartDate"
|
|
||||||
type="date"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
placeholder="选择实际开始时间"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="实际结束时间" prop="practicalEndDate">
|
<el-form-item label="实际结束时间" prop="practicalEndDate">
|
||||||
<el-date-picker
|
<el-date-picker clearable v-model="form.practicalEndDate" type="date" value-format="YYYY-MM-DD" placeholder="选择实际结束时间" />
|
||||||
clearable
|
|
||||||
v-model="form.practicalEndDate"
|
|
||||||
type="date"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
placeholder="选择实际结束时间"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-select v-model="form.status" placeholder="请选择状态">
|
<el-select v-model="form.status" placeholder="请选择状态">
|
||||||
@ -221,6 +224,7 @@ const initFormData = {
|
|||||||
remark: undefined,
|
remark: undefined,
|
||||||
projectStructureName: undefined
|
projectStructureName: undefined
|
||||||
};
|
};
|
||||||
|
const file = ref();
|
||||||
|
|
||||||
const data = reactive<PageData<ConstructionSchedulePlanForm, ConstructionSchedulePlanQuery>>({
|
const data = reactive<PageData<ConstructionSchedulePlanForm, ConstructionSchedulePlanQuery>>({
|
||||||
form: { ...initFormData },
|
form: { ...initFormData },
|
||||||
@ -279,6 +283,17 @@ const cancel = () => {
|
|||||||
dialog.visible = false;
|
dialog.visible = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleExport = async () => {
|
||||||
|
const ids = queryParams.value.projectId;
|
||||||
|
proxy?.download('/progress/constructionSchedulePlan/exportTemplate/' + ids, {}, `施工里程碑计划模版.xlsx`, true);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSuccess = () => {
|
||||||
|
console.log(111);
|
||||||
|
proxy.$modal.msgSuccess('操作成功');
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
// 表单重置
|
// 表单重置
|
||||||
const reset = () => {
|
const reset = () => {
|
||||||
form.value = { ...initFormData };
|
form.value = { ...initFormData };
|
||||||
|
|||||||
@ -31,6 +31,7 @@
|
|||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
|
<el-button icon="Download" type="warning" @click="onExport">导出</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -170,6 +171,17 @@ const dialog = reactive<DialogOption>({
|
|||||||
details: false,
|
details: false,
|
||||||
title: ''
|
title: ''
|
||||||
});
|
});
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
// 获取年份(4位数字)
|
||||||
|
const year = now.getFullYear();
|
||||||
|
|
||||||
|
// 获取月份(注意:getMonth() 返回 0-11,需要 +1 转换为 1-12)
|
||||||
|
const month = now.getMonth() + 1;
|
||||||
|
|
||||||
|
// 格式化月份为两位数(不足两位补0),拼接成年月字符串
|
||||||
|
const currentYearMonth = `${year}-${month.toString().padStart(2, '0')}`;
|
||||||
|
|
||||||
const echartsOption = ref<any>({});
|
const echartsOption = ref<any>({});
|
||||||
const exportForm = reactive({
|
const exportForm = reactive({
|
||||||
fuzzyQuery: undefined,
|
fuzzyQuery: undefined,
|
||||||
|
|||||||
@ -1,57 +1,54 @@
|
|||||||
export interface BusSalaryDetailsTableColumns {
|
export interface BusSalaryDetailsTableColumns {
|
||||||
id:number
|
id: number;
|
||||||
sfzNumber:string; // 身份证
|
sfzNumber: string; // 身份证
|
||||||
name:string; // 户名
|
name: string; // 户名
|
||||||
account:string; // 账户
|
account: string; // 账户
|
||||||
sumDuration:number; // 当月总时长
|
sumDuration: number; // 当月总时长
|
||||||
salary:number; // 薪水(天)
|
salary: number; // 薪水(天)
|
||||||
dateOfIssue:string; // 发放年月
|
dateOfIssue: string; // 发放年月
|
||||||
lister:string; // 制表人
|
lister: string; // 制表人
|
||||||
createdAt:string; // 创建时间
|
createdAt: string; // 创建时间
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface BusSalaryDetailsInfoData {
|
||||||
export interface BusSalaryDetailsInfoData {
|
id: number | undefined; // 主键ID
|
||||||
id:number|undefined; // 主键ID
|
sfzNumber: string | undefined; // 身份证
|
||||||
sfzNumber:string|undefined; // 身份证
|
name: string | undefined; // 户名
|
||||||
name:string|undefined; // 户名
|
account: string | undefined; // 账户
|
||||||
account:string|undefined; // 账户
|
sumDuration: number | undefined; // 当月总时长
|
||||||
sumDuration:number|undefined; // 当月总时长
|
salary: number | undefined; // 薪水(天)
|
||||||
salary:number|undefined; // 薪水(天)
|
projectId: number | undefined; // 项目id
|
||||||
projectId:number|undefined; // 项目id
|
teamId: number | undefined; // 班组id
|
||||||
teamId:number|undefined; // 班组id
|
projectName: string | undefined; // 项目名称
|
||||||
projectName:string|undefined; // 项目名称
|
teamName: string | undefined; // 班组名称
|
||||||
teamName:string|undefined; // 班组名称
|
dateOfIssue: string | undefined; // 发放年月
|
||||||
dateOfIssue:string|undefined; // 发放年月
|
lister: string | undefined; // 制表人
|
||||||
lister:string|undefined; // 制表人
|
createdAt: string | undefined; // 创建时间
|
||||||
createdAt:string|undefined; // 创建时间
|
updatedAt: string | undefined; // 更新时间
|
||||||
updatedAt:string|undefined; // 更新时间
|
deletedAt: string | undefined; // 删除时间
|
||||||
deletedAt:string|undefined; // 删除时间
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export interface BusSalaryDetailsTableDataState {
|
export interface BusSalaryDetailsTableDataState {
|
||||||
ids:any[];
|
ids: any[];
|
||||||
tableData: {
|
tableData: {
|
||||||
data: Array<BusSalaryDetailsTableColumns>;
|
data: Array<BusSalaryDetailsTableColumns>;
|
||||||
total: number;
|
total: number;
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
param: {
|
param: {
|
||||||
pageNum: number;
|
pageNum: number;
|
||||||
pageSize: number;
|
pageSize: number;
|
||||||
id: number|undefined;
|
id: number | undefined;
|
||||||
sfzNumber: string|undefined;
|
sfzNumber: string | undefined;
|
||||||
projectId: number|undefined;
|
projectId: number | undefined;
|
||||||
teamId: number|undefined;
|
teamId: number | undefined;
|
||||||
dateRange: string[];
|
dateRange: string[];
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface BusSalaryDetailsEditState {
|
||||||
export interface BusSalaryDetailsEditState{
|
loading: boolean;
|
||||||
loading:boolean;
|
isShowDialog: boolean;
|
||||||
isShowDialog: boolean;
|
formData: BusSalaryDetailsInfoData;
|
||||||
formData:BusSalaryDetailsInfoData;
|
rules: object;
|
||||||
rules: object;
|
}
|
||||||
}
|
|
||||||
|
|||||||
@ -4,26 +4,26 @@
|
|||||||
<div class="system-busSalaryDetails-search mb15">
|
<div class="system-busSalaryDetails-search mb15">
|
||||||
<el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="100px">
|
<el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="100px">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="4" class="colBlock">
|
<el-col :span="1.5" class="colBlock">
|
||||||
<el-form-item label="身份证" prop="sfzNumber">
|
<el-form-item label="身份证" prop="sfzNumber">
|
||||||
<el-input v-model="tableData.param.sfzNumber" placeholder="请输入身份证" clearable @keyup.enter.native="busSalaryDetailsList" />
|
<el-input v-model="tableData.param.sfzNumber" placeholder="请输入身份证" clearable @keyup.enter.native="busSalaryDetailsList" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="4">
|
<el-col :span="1.5">
|
||||||
<el-form-item label="项目选择" prop="projectId">
|
<el-form-item label="项目选择" prop="projectId">
|
||||||
<el-select v-model="tableData.param.projectId" placeholder="请选择项目" @change="onChangeProject">
|
<el-select v-model="tableData.param.projectId" placeholder="请选择项目" @change="onChangeProject">
|
||||||
<el-option v-for="(item, i) of projectList" :key="i" :label="item.shortName" :value="item.id"></el-option>
|
<el-option v-for="(item, i) of projectList" :key="i" :label="item.shortName" :value="item.id"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="4">
|
<el-col :span="1.5">
|
||||||
<el-form-item label="班组选择" prop="teamId">
|
<el-form-item label="班组选择" prop="teamId">
|
||||||
<el-select v-model="tableData.param.teamId" @change="onChangeTeam" :disabled="!tableData.param.projectId" placeholder="请选择班组">
|
<el-select v-model="tableData.param.teamId" @change="onChangeTeam" :disabled="!tableData.param.projectId" placeholder="请选择班组">
|
||||||
<el-option v-for="(item, i) of TeamList" :key="i" :label="item.name" :value="item.id"></el-option>
|
<el-option v-for="(item, i) of TeamList" :key="i" :label="item.name" :value="item.id"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="5">
|
<el-col :span="1.5">
|
||||||
<el-form-item label="发放年月" prop="dateOfIssue">
|
<el-form-item label="发放年月" prop="dateOfIssue">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="tableData.param.dateOfIssue"
|
v-model="tableData.param.dateOfIssue"
|
||||||
@ -34,7 +34,7 @@
|
|||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="1.5">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="busSalaryDetailsList"
|
<el-button type="primary" @click="busSalaryDetailsList"
|
||||||
><el-icon><Search /></el-icon>搜索</el-button
|
><el-icon><Search /></el-icon>搜索</el-button
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
v-for="(item, i) in weatherList"
|
v-for="(item, i) in weatherList"
|
||||||
:key="i"
|
:key="i"
|
||||||
class="weather-item"
|
class="weather-item"
|
||||||
:style="{ transform: `translateY(-${offsetY}px)`, transition: transition }"
|
:style="{ transform: `translateY(-${offsetY}vw)`, transition: transition }"
|
||||||
>
|
>
|
||||||
<img :src="`/assets/demo/${item.icon}.png`" alt="" />
|
<img :src="`/assets/demo/${item.icon}.png`" alt="" />
|
||||||
<div>{{ item.weather }}{{ item.tempMin }}°/{{ item.tempMax }}°</div>
|
<div>{{ item.weather }}{{ item.tempMin }}°/{{ item.tempMax }}°</div>
|
||||||
@ -39,7 +39,7 @@
|
|||||||
<!-- 右侧:管理系统图标 + 文字 -->
|
<!-- 右侧:管理系统图标 + 文字 -->
|
||||||
<div class="right-section">
|
<div class="right-section">
|
||||||
<img src="@/assets/large/setting.png" alt="设置图标" />
|
<img src="@/assets/large/setting.png" alt="设置图标" />
|
||||||
<span>管理系统</span>
|
<span style="width: 5vw">管理系统</span>
|
||||||
</div>
|
</div>
|
||||||
<!-- 分割线 -->
|
<!-- 分割线 -->
|
||||||
<div class="divider">
|
<div class="divider">
|
||||||
@ -129,7 +129,7 @@ function judgeDayOrNight(sunRise: string, sunSet: string) {
|
|||||||
const setWeatherScroll = () => {
|
const setWeatherScroll = () => {
|
||||||
curIndex.value += 1;
|
curIndex.value += 1;
|
||||||
transition.value = 'transform 0.3s ease';
|
transition.value = 'transform 0.3s ease';
|
||||||
offsetY.value = curIndex.value * 60;
|
offsetY.value = curIndex.value * 2;
|
||||||
|
|
||||||
if (curIndex.value === weatherList.value.length - 1) {
|
if (curIndex.value === weatherList.value.length - 1) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@ -242,13 +242,13 @@ onUnmounted(() => {
|
|||||||
|
|
||||||
.title > div:first-child {
|
.title > div:first-child {
|
||||||
/* 第一个子元素的样式 */
|
/* 第一个子元素的样式 */
|
||||||
font-size: 38px;
|
font-size: 2vw;
|
||||||
letter-spacing: 0.1em;
|
letter-spacing: 0.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title > div:last-child {
|
.title > div:last-child {
|
||||||
/* 最后一个子元素的样式 */
|
/* 最后一个子元素的样式 */
|
||||||
font-size: 26px;
|
font-size: 1.5vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 顶部栏容器:Flex 水平布局 + 垂直居中 */
|
/* 顶部栏容器:Flex 水平布局 + 垂直居中 */
|
||||||
@ -270,22 +270,23 @@ onUnmounted(() => {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.weather-list {
|
.weather-list {
|
||||||
height: 60px;
|
height: 2vw;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
.weather-item {
|
.weather-item {
|
||||||
height: 60px;
|
height: 2vw;
|
||||||
line-height: 60px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 0.8vw;
|
||||||
|
|
||||||
& > div:last-child {
|
& > div:last-child {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 50px;
|
width: 3vw;
|
||||||
height: 50px;
|
height: 3vw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -315,10 +316,12 @@ onUnmounted(() => {
|
|||||||
|
|
||||||
/* 右侧区域(管理系统):图标 + 文字水平排列 */
|
/* 右侧区域(管理系统):图标 + 文字水平排列 */
|
||||||
.right-section {
|
.right-section {
|
||||||
|
width: 5.5vw;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
font-family: 'AlimamaShuHeiTi', sans-serif;
|
font-family: 'AlimamaShuHeiTi', sans-serif;
|
||||||
font-size: 20px;
|
font-size: 1vw;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user