7 changed files with 907 additions and 71 deletions
@ -0,0 +1,341 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<div> |
||||
|
<el-form |
||||
|
ref="ref_form" |
||||
|
:inline="true" |
||||
|
:model="dataForm" |
||||
|
:rules="dataRule" |
||||
|
:disabled="formType === 'detail'" |
||||
|
class="form" |
||||
|
> |
||||
|
<el-form-item |
||||
|
label="事项名称" |
||||
|
prop="matterName" |
||||
|
label-width="150px" |
||||
|
style="display: block" |
||||
|
> |
||||
|
<el-input |
||||
|
class="item_width_1" |
||||
|
maxlength="50" |
||||
|
show-word-limit |
||||
|
v-model="info.matterName" |
||||
|
disabled |
||||
|
> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item |
||||
|
label="预约日期" |
||||
|
prop="appointmentDate" |
||||
|
label-width="150px" |
||||
|
style="display: block" |
||||
|
> |
||||
|
<el-date-picker |
||||
|
v-model="dataForm.appointmentDate" |
||||
|
placeholder="预约日期" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
:picker-options="dateOptions" |
||||
|
> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item |
||||
|
v-if="timeList.length > 0" |
||||
|
label="预约时段" |
||||
|
prop="timeId" |
||||
|
label-width="150px" |
||||
|
style="display: block" |
||||
|
> |
||||
|
<el-checkbox-group |
||||
|
style="margin-left: auto; width: 600px" |
||||
|
v-model="dataForm.timeId" |
||||
|
> |
||||
|
<el-checkbox |
||||
|
:label="item.timeId" |
||||
|
:key="item.timeId" |
||||
|
:disabled="item.isAppointment" |
||||
|
v-for="item in timeList" |
||||
|
>{{ item.time }}</el-checkbox |
||||
|
> |
||||
|
</el-checkbox-group> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item |
||||
|
label="预约人" |
||||
|
prop="appointmentName" |
||||
|
label-width="150px" |
||||
|
style="display: block" |
||||
|
> |
||||
|
<el-input |
||||
|
class="item_width_1" |
||||
|
maxlength="50" |
||||
|
show-word-limit |
||||
|
placeholder="请输入预约人" |
||||
|
v-model="dataForm.appointmentName" |
||||
|
> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item |
||||
|
label="联系方式" |
||||
|
prop="appointmentPhone" |
||||
|
label-width="150px" |
||||
|
style="display: block" |
||||
|
> |
||||
|
<el-input |
||||
|
class="item_width_1" |
||||
|
maxlength="50" |
||||
|
show-word-limit |
||||
|
placeholder="请输入联系方式" |
||||
|
v-model="dataForm.appointmentPhone" |
||||
|
> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item |
||||
|
label="备注" |
||||
|
prop="remark" |
||||
|
label-width="150px" |
||||
|
style="display: block" |
||||
|
> |
||||
|
<el-input |
||||
|
class="item_width_1" |
||||
|
type="textarea" |
||||
|
maxlength="1000" |
||||
|
show-word-limit |
||||
|
:rows="3" |
||||
|
placeholder="请输入备注,不超过1000字" |
||||
|
v-model="dataForm.remark" |
||||
|
></el-input> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
<div class="div_btn"> |
||||
|
<el-button @click="handleCancle">取 消</el-button> |
||||
|
<el-button |
||||
|
v-if="formType != 'detail'" |
||||
|
type="primary" |
||||
|
:disabled="btnDisable" |
||||
|
@click="handleComfirm" |
||||
|
>确 定</el-button |
||||
|
> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapGetters } from "vuex"; |
||||
|
import { Loading } from "element-ui"; // 引入Loading服务 |
||||
|
import { requestPost } from "@/js/dai/request"; |
||||
|
|
||||
|
var map; |
||||
|
var search; |
||||
|
var markers; |
||||
|
var infoWindowList; |
||||
|
let loading; // 加载动画 |
||||
|
|
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
formType: "add", //表单操作类型 add新增,edit编辑,detail详情 |
||||
|
|
||||
|
btnDisable: false, |
||||
|
|
||||
|
info: { |
||||
|
matterName: "", |
||||
|
}, |
||||
|
|
||||
|
dateOptions: { |
||||
|
disabledDate(time) { |
||||
|
return ( |
||||
|
time.getTime() < Date.now() - 3600 * 24 * 1 * 1000 || |
||||
|
time.getTime() > Date.now() + 3600 * 24 * 6 * 1000 |
||||
|
); |
||||
|
}, |
||||
|
}, |
||||
|
timeList: [], |
||||
|
|
||||
|
dataForm: { |
||||
|
matterId: "", |
||||
|
appointmentDate: "", |
||||
|
timeId: [], |
||||
|
appointmentName: "", |
||||
|
appointmentPhone: "", |
||||
|
remark: "", |
||||
|
}, |
||||
|
}; |
||||
|
}, |
||||
|
components: {}, |
||||
|
computed: { |
||||
|
dataRule() { |
||||
|
return { |
||||
|
appointmentName: [ |
||||
|
{ required: true, message: "预约人不能为空", trigger: "blur" }, |
||||
|
], |
||||
|
appointmentPhone: [ |
||||
|
{ required: true, message: "预约人电话不能为空", trigger: "blur" }, |
||||
|
], |
||||
|
appointmentDate: [ |
||||
|
{ required: true, message: "预约日期不能为空", trigger: "blur" }, |
||||
|
], |
||||
|
timeId: [ |
||||
|
{ required: true, message: "预约时段不能为空", trigger: "blur" }, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
}, |
||||
|
props: {}, |
||||
|
watch: { |
||||
|
"dataForm.appointmentDate": function () { |
||||
|
this.getTimeList(); |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
async mounted() {}, |
||||
|
|
||||
|
methods: { |
||||
|
async initForm(type, row, index) { |
||||
|
this.$refs.ref_form.resetFields(); |
||||
|
|
||||
|
let item = row.matterList[index]; |
||||
|
if (item) { |
||||
|
this.dataForm.matterId = item.matterId; |
||||
|
this.info.matterName = item.matterName; |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
async getTimeList() { |
||||
|
let url = "/gov/org/icpartyservicecenter/appointmenttime"; |
||||
|
|
||||
|
const { |
||||
|
dataForm: { matterId, appointmentDate }, |
||||
|
} = this; |
||||
|
if (!matterId || !appointmentDate) return; |
||||
|
|
||||
|
const { data, code, msg } = await requestPost(url, { |
||||
|
matterId, |
||||
|
date: appointmentDate, |
||||
|
}); |
||||
|
|
||||
|
if (code === 0) { |
||||
|
this.timeList = data.timeDetail || []; |
||||
|
} else { |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
async handleComfirm() { |
||||
|
this.btnDisable = true; |
||||
|
setTimeout(() => { |
||||
|
this.btnDisable = false; |
||||
|
}, 10000); |
||||
|
this.$refs["ref_form"].validate((valid, messageObj) => { |
||||
|
if (!valid) { |
||||
|
app.util.validateRule(messageObj); |
||||
|
this.btnDisable = false; |
||||
|
} else { |
||||
|
this.submit(); |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
async submit() { |
||||
|
let url = ""; |
||||
|
if (this.formType === "add") { |
||||
|
url = "/gov/org/icpartyservicecenter/appointment"; |
||||
|
// url = "http://yapi.elinkservice.cn/mock/245/gov/org/neighborhood/neighborhoodadd" |
||||
|
} |
||||
|
|
||||
|
const { data, code, msg } = await requestPost(url, { |
||||
|
...this.dataForm, |
||||
|
timeId: this.dataForm.timeId.join(","), |
||||
|
}); |
||||
|
|
||||
|
if (code === 0) { |
||||
|
this.$message({ |
||||
|
type: "success", |
||||
|
message: "操作成功", |
||||
|
}); |
||||
|
this.resetData(); |
||||
|
this.$emit("dialogOk"); |
||||
|
this.btnDisable = false; |
||||
|
} else { |
||||
|
this.btnDisable = false; |
||||
|
this.$message.error(msg); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
handleCancle() { |
||||
|
this.resetData(); |
||||
|
this.$emit("dialogCancle"); |
||||
|
}, |
||||
|
resetData() { |
||||
|
this.dataForm = { |
||||
|
matterId: "", |
||||
|
appointmentDate: "", |
||||
|
timeId: [], |
||||
|
appointmentName: "", |
||||
|
appointmentPhone: "", |
||||
|
remark: "", |
||||
|
}; |
||||
|
this.timeList = []; |
||||
|
}, |
||||
|
// 开启加载动画 |
||||
|
startLoading() { |
||||
|
loading = Loading.service({ |
||||
|
lock: true, // 是否锁定 |
||||
|
text: "正在加载……", // 加载中需要显示的文字 |
||||
|
background: "rgba(0,0,0,.7)", // 背景颜色 |
||||
|
}); |
||||
|
}, |
||||
|
// 结束加载动画 |
||||
|
endLoading() { |
||||
|
// clearTimeout(timer); |
||||
|
if (loading) { |
||||
|
loading.close(); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.item_width_1 { |
||||
|
width: 500px; |
||||
|
} |
||||
|
.item_width_2 { |
||||
|
width: 400px; |
||||
|
} |
||||
|
.item_width_3 { |
||||
|
margin-left: 10px; |
||||
|
width: 200px; |
||||
|
} |
||||
|
.item_width_4 { |
||||
|
width: 200px; |
||||
|
} |
||||
|
|
||||
|
.div_map { |
||||
|
margin-top: 10px; |
||||
|
} |
||||
|
|
||||
|
.div_btn { |
||||
|
display: flex; |
||||
|
justify-content: flex-end; |
||||
|
} |
||||
|
.el-tabs { |
||||
|
margin: 0 20px; |
||||
|
} |
||||
|
.el-upload__tip { |
||||
|
color: rgb(155, 155, 155); |
||||
|
margin: 0; |
||||
|
} |
||||
|
.form { |
||||
|
margin-top: 30px; |
||||
|
} |
||||
|
</style> |
||||
|
|
||||
|
<style> |
||||
|
.el-dialog__body { |
||||
|
padding: 0 10px 20px !important; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,206 @@ |
|||||
|
<template> |
||||
|
<div style="min-height: 400px"> |
||||
|
<el-form ref="ref_form" :inline="true" class="form"> |
||||
|
<el-form-item |
||||
|
label="选择预约日期" |
||||
|
prop="appointmentDate" |
||||
|
label-width="110px" |
||||
|
style="display: block" |
||||
|
> |
||||
|
<el-date-picker |
||||
|
v-model="appointmentDate" |
||||
|
placeholder="预约日期" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
|
||||
|
<el-table |
||||
|
v-if="tableData.length > 0" |
||||
|
:data="tableData" |
||||
|
border |
||||
|
style="width: 96%; margin: 0 auto" |
||||
|
class="resi-table" |
||||
|
:max-height="maxTableHeight" |
||||
|
> |
||||
|
<el-table-column label="序号" type="index" align="center" width="50" /> |
||||
|
<el-table-column prop="matterName" label="预约事项"></el-table-column> |
||||
|
<el-table-column |
||||
|
prop="appointmentTime" |
||||
|
label="预约时间" |
||||
|
></el-table-column> |
||||
|
<el-table-column prop="appointmentName" label="预约人"></el-table-column> |
||||
|
<el-table-column |
||||
|
prop="appointmentPhone" |
||||
|
label="联系方式" |
||||
|
></el-table-column> |
||||
|
<el-table-column prop="remark" label="备注"></el-table-column> |
||||
|
<el-table-column fixed="right" label="操作" align="center" width="120"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-button |
||||
|
@click="handleCancel(scope.$index)" |
||||
|
type="text" |
||||
|
size="small" |
||||
|
>取消</el-button |
||||
|
> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
|
||||
|
<div class="m-hint" v-else> |
||||
|
<el-empty description="暂无内容" :image-size="200"></el-empty> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapGetters } from "vuex"; |
||||
|
import { Loading } from "element-ui"; // 引入Loading服务 |
||||
|
import { requestPost } from "@/js/dai/request"; |
||||
|
|
||||
|
var map; |
||||
|
var search; |
||||
|
var markers; |
||||
|
var infoWindowList; |
||||
|
let loading; // 加载动画 |
||||
|
|
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
appointmentDate: new Date().toLocaleDateString().split("/").join("-"), |
||||
|
matterId: "", |
||||
|
tableData: [], |
||||
|
}; |
||||
|
}, |
||||
|
components: {}, |
||||
|
computed: {}, |
||||
|
props: {}, |
||||
|
watch: { |
||||
|
appointmentDate: function () { |
||||
|
this.getList(); |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
async mounted() {}, |
||||
|
|
||||
|
methods: { |
||||
|
async init(row, index) { |
||||
|
let item = row.matterList[index]; |
||||
|
if (item) { |
||||
|
this.matterId = item.matterId; |
||||
|
this.getList(); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
async getList() { |
||||
|
let url = "/gov/org/icpartyservicecenter/appointmentrecord"; |
||||
|
|
||||
|
const { matterId, appointmentDate } = this; |
||||
|
if (!matterId || !appointmentDate) return; |
||||
|
|
||||
|
const { data, code, msg } = await requestPost(url, { |
||||
|
matterId, |
||||
|
date: appointmentDate, |
||||
|
}); |
||||
|
|
||||
|
if (code === 0) { |
||||
|
this.tableData = data |
||||
|
? data.map((item) => { |
||||
|
item.appointmentTime = item.appointmentTime.join(","); |
||||
|
return item; |
||||
|
}) |
||||
|
: []; |
||||
|
} else { |
||||
|
} |
||||
|
}, |
||||
|
async handleCancel(index) { |
||||
|
let url = "/gov/org/icpartyservicecenter/cancelappointment"; |
||||
|
|
||||
|
const { matterId, tableData } = this; |
||||
|
|
||||
|
const { data, code, msg } = await requestPost(url, { |
||||
|
matterId, |
||||
|
recordId: tableData[index].recordId, |
||||
|
}); |
||||
|
|
||||
|
if (code === 0) { |
||||
|
this.$message.success("操作成功"); |
||||
|
this.getList(); |
||||
|
} else { |
||||
|
this.$message.error(msg); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
handleCancle() { |
||||
|
this.resetData(); |
||||
|
this.$emit("dialogCancle"); |
||||
|
}, |
||||
|
resetData() { |
||||
|
this.tableData = []; |
||||
|
}, |
||||
|
// 开启加载动画 |
||||
|
startLoading() { |
||||
|
loading = Loading.service({ |
||||
|
lock: true, // 是否锁定 |
||||
|
text: "正在加载……", // 加载中需要显示的文字 |
||||
|
background: "rgba(0,0,0,.7)", // 背景颜色 |
||||
|
}); |
||||
|
}, |
||||
|
// 结束加载动画 |
||||
|
endLoading() { |
||||
|
// clearTimeout(timer); |
||||
|
if (loading) { |
||||
|
loading.close(); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.m-hint { |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
text-align: center; |
||||
|
} |
||||
|
|
||||
|
.item_width_1 { |
||||
|
width: 500px; |
||||
|
} |
||||
|
.item_width_2 { |
||||
|
width: 400px; |
||||
|
} |
||||
|
.item_width_3 { |
||||
|
margin-left: 10px; |
||||
|
width: 200px; |
||||
|
} |
||||
|
.item_width_4 { |
||||
|
width: 200px; |
||||
|
} |
||||
|
|
||||
|
.div_map { |
||||
|
margin-top: 10px; |
||||
|
} |
||||
|
|
||||
|
.div_btn { |
||||
|
display: flex; |
||||
|
justify-content: flex-end; |
||||
|
} |
||||
|
.el-tabs { |
||||
|
margin: 0 20px; |
||||
|
} |
||||
|
.el-upload__tip { |
||||
|
color: rgb(155, 155, 155); |
||||
|
margin: 0; |
||||
|
} |
||||
|
.form { |
||||
|
margin-top: 30px; |
||||
|
} |
||||
|
</style> |
||||
|
|
||||
|
<style> |
||||
|
.el-dialog__body { |
||||
|
padding: 0 10px 20px !important; |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue