first commit

This commit is contained in:
2026-09-08 19:49:21 +08:00
commit ebffbab428
7320 changed files with 1477614 additions and 0 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
@@ -0,0 +1,449 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.imgFileClass .el-upload {
text-align: center;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card class="mt20" shadow="never">
<table-tool :app="this" label="住宅预申购调查">
<template #func>
<el-button @click="openAdd" size="small" type="primary">添加活动</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize"
@sort-change="pageOrder" header-align="center">
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
<template scope="scope">
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
</template>
</el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
:width="column.width"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns"
>
<template scope="{row}" v-if="column.prop=='houseTypeList'">
<el-link @click="openView(row)" type="primary">查看户型</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='buildingFiles'">
<el-link @click="openViewBuildingFiles(row.buildingFiles)" type="primary">查看楼栋图</el-link>
</template>
</el-table-column>
<el-table-column header-align="center" label="操作" width="400px">
<template scope="scope">
<el-button @click="generateQrCode(scope.row.id)" size="mini" type="primary">活动二维码</el-button>
<el-button @click="openViewHasSelUsers(scope.row)" size="mini" type="primary">查看填写情况</el-button>
<el-button @click="openEdit(scope.row)" size="mini" type="primary">编辑</el-button>
<el-button @click="doDelete(scope.row.id)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<el-form :model="formData" :rules="rules" label-width="120px" ref="form">
<vi-title title="基本信息"></vi-title>
<el-form-item label="活动名称" prop="actName">
<el-input clearable maxlength="30" v-model="formData.actName"></el-input>
</el-form-item>
<el-row :gutter="20">
<el-col :md="12" :xs="24">
<el-form-item label="开始时间" prop="startTime">
<el-date-picker clearable
style="width: 100%"
type="datetime"
v-model="formData.startTime"
value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
</el-col>
<el-col :md="12" :xs="24">
<el-form-item label="结束时间" prop="endTime">
<el-date-picker clearable
style="width: 100%"
type="datetime"
v-model="formData.endTime"
value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="楼栋分布图" prop="buildingFiles">
<file-upload :files.sync="formData.buildingFiles" :max="5" :type="['jpg','png']"></file-upload>
</el-form-item>
<vi-title2 title="房型信息">
<template #func>
<el-button @click="addHouseType" size="small" type="primary">添加房型</el-button>
</template>
</vi-title2>
<el-table :data="formData.houseTypeList" header-align="center">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column header-align="center" label="面积(㎡)" prop="area">
<template scope="scope">
<el-form-item :prop="'houseTypeList.'+scope.$index+'.area'"
:rules="rules.area"
label-width="0">
<el-input-number :max="1000" :min="1" :precision="0"
:step="1"
v-model="scope.row.area"></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column header-align="center" label="数量" prop="number">
<template scope="scope">
<el-form-item :prop="'houseTypeList.'+scope.$index+'.number'"
:rules="rules.number"
label-width="0">
<el-input-number :max="1000" :min="1" :precision="0"
:step="1"
v-model="scope.row.number"></el-input-number>
</el-form-item>
</template>
</el-table-column>
<el-table-column header-align="center" label="楼栋" prop="building">
<template scope="scope">
<el-form-item :prop="'houseTypeList.'+scope.$index+'.building'"
:rules="rules.building"
label-width="0">
<el-input v-model="scope.row.building" maxLength="100"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column header-align="center" label="价格区间" prop="priceRange">
<template scope="scope">
<el-form-item :prop="'houseTypeList.'+scope.$index+'.priceRange'"
:rules="rules.priceRange"
label-width="0">
<el-input v-model="scope.row.priceRange" maxLength="20"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column header-align="center" label="预览图" prop="number">
<template scope="scope">
<el-form-item :prop="'houseTypeList.'+scope.$index+'.imgFiles'"
:rules="rules.imgFiles"
label-width="0">
<file-upload :files.sync="scope.row.imgFiles"
:max="1"
:type="['jpg', 'jpeg', 'png']"
class="imgFileClass"></file-upload>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<el-row class="mt20" justify="end" type="flex">
<el-button @click="$refs.guava.index()">取消</el-button>
<el-button @click="doSubmit" type="primary">提交</el-button>
</el-row>
</template>
<template #view>
<vi-title2 title="已选择人员">
<template #func>
<el-button @click="doExportHasSelUsers" size="small" type="primary">导出</el-button>
</template>
</vi-title2>
<el-table :data="hasSelectedUser">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="工号" prop="loginName" width="110px"></el-table-column>
<el-table-column label="所在单位" prop="unitName"></el-table-column>
<el-table-column label="出生年月" prop="birthday" width="100px"></el-table-column>
<el-table-column label="参加工作时间" prop="joinWorkTime" width="110px"></el-table-column>
<el-table-column label="进校时间" prop="schoolTime" width="100px"></el-table-column>
<el-table-column label="职称职务" prop="titlePosition"></el-table-column>
<el-table-column label="职称职务评定时间" prop="titleAsAssessmentTime" width="100px"></el-table-column>
<el-table-column label="是否双职工" prop="isDoubleStaff" width="110px">
<template scope="scope">
{{scope.row.isDoubleStaff ? '√':''}}
</template>
</el-table-column>
<!-- <el-table-column label="是否服从调配" prop="whetherToAllocate">
<template scope="scope">
{{scope.row.whetherToAllocate ? '√':'×'}}
</template>
</el-table-column>-->
<el-table-column label="选择的户型">
<el-table-column :label="item.label" v-for="item in viewActHouseTypeList">
<template scope="scope">
<span v-if="scope.row.firstIntentionHouseId==item.prop">
第一意向
</span>
<span v-else-if="scope.row.secondIntentionHouseId==item.prop">
第二意向
</span>
<span v-else-if="scope.row.thirdIntentionHouseId==item.prop">
第三意向
</span>
<span v-else-if="scope.row.fourthIntentionHouseId==item.prop">
第四意向
</span>
<span v-else-if="scope.row.fifthIntentionHouseId==item.prop">
第五意向
</span>
<span v-else-if="scope.row.sixthIntentionHouseId==item.prop">
第六意向
</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="是否接受调剂其他户型" prop="isAcceptChangeHouse">
<template scope="scope">
<templte v-if="scope.row.isAcceptChangeHouse!=null">
{{scope.row.isAcceptChangeHouse ? '√':'×'}}
</templte>
</template>
</el-table-column>
<el-table-column label="不参与选购" prop="noSelectIntention">
<template scope="scope">
{{scope.row.noSelectIntention ? '√':''}}
</template>
</el-table-column>
<el-table-column label="其它意向" prop="otherIntention" show-overflow-tooltip width="200px">
<template scope="scope">
{{scope.row.otherIntention}}
</template>
</el-table-column>
</el-table>
</template>
<el-dialog :close-on-click-modal="false" :visible.sync="viewDialogVisible" title="查看" width="60%">
<el-descriptions :column="2" border>
<el-descriptions-item :span="2" label="名称">
{{viewData.actName}}
</el-descriptions-item>
<el-descriptions-item label="开始时间">
{{viewData.startTime}}
</el-descriptions-item>
<el-descriptions-item label="结束时间">
{{viewData.endTime}}
</el-descriptions-item>
</el-descriptions>
<el-carousel class="mt20" height="500px">
<el-carousel-item :key="item" v-for="item in viewData.houseTypeList">
<div style="position:relative;">
<h4 style="color: #0e78c5">
面积:{{item.area + 'm²'}}
数量:{{item.number + '套'}}
</h4>
<el-image :src="APP_DOMAIN+'/file_server/fileStreamPreview?id='+item.imgFiles[0].id"
@click="preview(item.imgFiles[0].filename,item.imgFiles[0].id)"></el-image>
</div>
</el-carousel-item>
</el-carousel>
</el-dialog>
<el-dialog :close-on-click-modal="false" :visible.sync="qrCodeDialog" title="查看" width="500px">
<div style="text-align: center">
<qrcode :value="qrCodeUrl" :options="{ width: 400 }"></qrcode>
</div>
</el-dialog>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'table-upload': httpVueLoader('/components/plugins/TableUpload.vue')
},
data() {
return {
formData: {
houseTypeList: [
{
area: null,
number: 1,
imgFiles: null
}
],
startTime: null,
endTime: null
},
rules: {
actName: [{required: true, message: '请输入名称', trigger: ['change', 'blur']}],
startTime: [{required: true, message: '请选择开始时间', trigger: ['change', 'blur']}],
endTime: [{required: true, message: '请选择结束时间', trigger: ['change', 'blur']}],
buildingFiles: [{required: true, message: '请上传户型图', trigger: ['change', 'blur']}],
area: [{required: true, message: '请输入面积', trigger: ['change', 'blur']}],
number: [{required: true, message: '请输入数量', trigger: ['change', 'blur']}],
building: [{required: true, message: '请输入楼栋', trigger: ['change', 'blur']}],
priceRange: [{required: true, message: '请输入价格区间', trigger: ['change', 'blur']}],
imgFiles: [{required: true, message: '请上传户型图', trigger: ['change', 'blur']}],
},
tableColumns: [
{prop: 'actName', label: '名称',},
{prop: 'startTime', label: '开始时间'},
{prop: 'endTime', label: '结束时间'},
{prop: 'houseTypeList', label: '户型'},
{prop: 'buildingFiles', label: '楼栋'},
],
viewData: {
houseTypeList: []
},
viewDialogVisible: false,
hasSelectedUser: [],
viewActHouseTypeList: [],
tableSelectRowId: null,
qrCodeDialog: false,
qrCodeUrl: 'https://www.baidu.com'
}
},
watch: {
'formData.buildingFiles'(val) {
this.$refs.form.validateField('buildingFiles', (errMsg) => {
console.log(errMsg)
})
}
},
methods: {
openAdd() {
this.formData = {
houseTypeList: [
{
area: null,
number: 1,
imgFiles: []
}
],
startTime: null,
endTime: null
}
this.$refs.guava.edit()
},
addHouseType() {
this.formData.houseTypeList.push({
area: null,
number: 1,
imgFiles: []
})
},
async doSubmit() {
const valid = await this.$refs['form'].validate()
if (!valid) return
const reqMethod = this.formData.id ? '/doEdit' : '/doAdd'
const resp = await $.post('/platform/tempActivity/house/actSetUp' + reqMethod, {
tempActHouse: JSON.stringify(this.formData)
})
if (resp.code === 0) {
this.pageData()
this.notifySuccess(resp.msg)
this.$refs.guava.index()
} else {
this.notifyWarning(resp.msg)
}
},
async pageData() {
sublime.showLoadingbar()
const resp = await $.post('/platform/tempActivity/house/actSetUp/pageData', this.pageForm)
sublime.closeLoadingbar()
if (resp.code === 0) {
this.pageForm.totalCount = resp.data.totalCount
this.tableData = resp.data.list
} else {
this.notifyWarning(resp.msg)
}
},
openView(row) {
this.viewData = clone(row)
this.viewDialogVisible = true
},
async openViewHasSelUsers(row) {
this.tableSelectRowId = row.id
const resp = await $.post('/platform/tempActivity/house/queryHasSelUser/' + row.id)
if (resp.code === 0) {
this.$refs.guava.view()
resp.data.forEach(v => {
v.birthday = moment(v.birthday).format('YYYY-MM-DD')
v.joinWorkTime = moment(v.joinWorkTime).format('YYYY-MM-DD')
v.schoolTime = moment(v.schoolTime).format('YYYY-MM-DD')
v.titleAsAssessmentTime = moment(v.titleAsAssessmentTime).format('YYYY-MM-DD')
})
this.hasSelectedUser = resp.data
}
this.viewActHouseTypeList = row.houseTypeList.map(v => {
return {
prop: v.id,
label: v.area + 'm²',
area: v.area
}
})
this.viewActHouseTypeList.sort((a, b) => {
return a['area'] - b['area']
})
},
openEdit(row) {
this.formData = row
this.$refs.guava.edit()
},
async doDelete(id) {
const confirm = await this.$confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if ('confirm' !== confirm) return
const resp = await $.post('/platform/tempActivity/house/actSetUp/doDelete/' + id)
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.doSearch()
} else {
this.notifyWarning(resp.msg)
}
},
doExportHasSelUsers() {
window.open('/platform/tempActivity/house/tableSelectRowId/' + this.tableSelectRowId)
},
generateQrCode(id) {
this.qrCodeDialog = true
this.qrCodeUrl = APP_DOMAIN + '/platform/tempActivity/house/mobileForm?actId=' + id
},
openViewBuildingFiles(buildingFiles) {
const ele = document.createElement("div")
buildingFiles.forEach(v => {
const image = new Image();
image.src = FILE_STREAM_PREVIEW_ADDRESS + '?id=' + v.id
image.alt = v.filename
ele.appendChild(image);
})
const viewer = new Viewer(ele, {
title: function (img, obj) {
return img.getAttribute("alt");
}
});
viewer.show()
}
},
created() {
this.pageData()
}
})
</script>
<!--#
}
#-->