城阳pc工作端前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

429 lines
11 KiB

<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form
ref="ref_form"
:inline="true"
:model="fmData"
:rules="dataRule"
:disabled="formType === 'watch'"
class="form"
>
<el-form-item
label="服务类别 "
prop="serviceCategoryKey"
label-width="150px"
style="display: block"
>
<el-select
v-if="formType == 'add'"
v-model="fmData.serviceCategoryKey"
placeholder="请选择"
clearable
>
<el-option
v-for="item in categoryOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<div v-else>{{ fmData.serviceCategory || "--" }}</div>
</el-form-item>
<el-form-item
label="项目名称"
prop="serviceName"
label-width="150px"
style="display: block"
>
<el-input
v-if="formType == 'add' || formType == 'edit'"
class="item_width_1"
maxlength="100"
show-word-limit
placeholder="请输入项目名称"
v-model="fmData.serviceName"
>
</el-input>
<div v-else>{{ fmData.serviceName || "--" }}</div>
</el-form-item>
<el-form-item
label="服务内容"
prop="serviceContent"
label-width="150px"
style="display: block"
>
<el-input
v-if="formType == 'add' || formType == 'edit'"
class="item_width_1"
type="textarea"
maxlength="1000"
show-word-limit
:rows="3"
placeholder="请输入服务内容,不超过1000字"
v-model="fmData.serviceContent"
></el-input>
<div v-else>{{ fmData.serviceContent || "--" }}</div>
</el-form-item>
<el-form-item
label="政策级别 "
prop="policyLevel"
label-width="150px"
style="display: block"
>
<el-select
v-if="formType == 'add' || formType == 'edit'"
v-model="fmData.policyLevel"
placeholder="请选择"
clearable
>
<el-option
v-for="item in levelOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<div v-else>{{ fmData.policyLevelName || "--" }}</div>
</el-form-item>
<el-form-item
label="政策依据"
prop="policyGround"
label-width="150px"
style="display: block"
>
<el-input
v-if="formType == 'add' || formType == 'edit'"
class="item_width_1"
type="textarea"
maxlength="1000"
show-word-limit
:rows="3"
placeholder="请输入政策依据,不超过1000字"
v-model="fmData.policyGround"
></el-input>
<div v-else>{{ fmData.policyGround || "--" }}</div>
</el-form-item>
<el-form-item
label="图片/附件"
label-width="150px"
style="display: block"
prop="attachmentList"
>
<el-upload
class="avatar-uploader"
:action="uploadUrl"
:data="{ customerId: customerId }"
:show-file-list="true"
:file-list="fmData.attachmentList"
:on-preview="handleImgPreview"
:on-success="handleImgSuccess"
:on-remove="handleImgRemove"
:on-exceed="handleImgExceed"
:before-upload="beforeImgUpload"
:limit="3"
>
<i class="el-icon-plus avatar-uploader-icon"></i>
<span style="color: #999"> 点击上传,支持图片、word、pdf格式</span>
</el-upload>
</el-form-item>
</el-form>
</div>
<div class="div_btn resi-btns">
<el-button size="small" @click="handleCancle"> </el-button>
<el-button
v-if="formType != 'watch'"
type="primary"
size="small"
:disabled="btnDisable"
@click="handleComfirm"
> </el-button
>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { requestPost } from "@/js/dai/request";
import formVltHelper from "dai-js/tools/formVltHelper";
export default {
props: {
formId: {
type: String,
default: "",
},
formType: {
type: String,
default: "info",
},
},
data() {
return {
uploadUrl: window.SITE_CONFIG["apiURL"] + "/oss/file/uploadqrcodeV2",
customerId: localStorage.getItem("customerId"),
btnDisable: false,
fmData: {
serviceCategoryKey: "",
serviceName: "",
serviceContent: "",
policyGround: "",
policyLevel: "",
attachmentList: [],
},
levelOptions: [
{
value: "0",
label: "市级",
},
{
value: "1",
label: "区级",
},
{
value: "2",
label: "街道级",
},
],
categoryOptions: [],
};
},
components: {},
computed: {
dataRule() {
return {
serviceCategoryKey: [
{ required: true, message: "服务类别不能为空", trigger: "blur" },
],
serviceName: [
{ required: true, message: "项目名称不能为空", trigger: "blur" },
],
serviceContent: [
{ required: true, message: "服务内容不能为空", trigger: "blur" },
],
// policyGround: [
// { required: true, message: "政策依据不能为空", trigger: "blur" },
// ],
// policyLevel: [
// { required: true, message: "政策级别不能为空", trigger: "blur" },
// ],
};
},
},
watch: {},
async mounted() {
this.initForm();
},
methods: {
async initForm() {
this.getCategoryOpitons();
if (this.formId && this.formType != "add") {
this.getInfo();
}
},
async getInfo() {
const url = "/heart/icServiceProject/serviceProjectDetail";
const params = {
serviceProjectId: this.formId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.fmData = { ...this.fmData, ...data };
} else {
this.$message.error(msg);
}
},
async getCategoryOpitons() {
const url = "/sys/dict/data/dictlist";
const params = {
dictType: "ic_service_type",
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.categoryOptions = data || [];
} else {
this.$message.error(msg);
}
},
beforeImgUpload(file) {
console.log(file);
const isLt1M = file.size / 1024 / 1024 < 10;
const srcType = file.type;
const format = file.name.split(".").pop();
if (!isLt1M) {
this.$message.error("上传文件大小不能超过 10MB!");
return false;
}
if (
srcType.indexOf("image") == -1 &&
srcType.indexOf("video") == -1 &&
["doc", "docx", "xls", "xlsx", "ppt", "pptx", "pdf"].indexOf(format) ==
-1
) {
this.$message.error("仅限图片、word和pdf文件!");
return false;
}
return true;
},
handleImgSuccess(res, file, fileList) {
console.log("handleImgSuccess", file);
if (res.code === 0 && res.msg === "success") {
let format = file.name.split(".").pop();
let srcType = file.raw.type;
let type = "file";
console.log("==============================srcType: ", srcType);
if (srcType.indexOf("image") != -1) {
type = "image";
} else if (srcType.indexOf("video") != -1) {
type = "video";
}
this.fmData.attachmentList.push({
format,
name: file.name,
size: file.size,
type,
url: res.data.url,
});
console.log(this.fmData.attachmentList);
} else {
this.$message.error(res.msg);
}
},
handleImgPreview(file) {
console.log(file);
window.open(file.url || file.response.data.url);
},
handleImgRemove(file) {
console.log("handleImgRemove", file);
if (file.response) {
let index = this.fmData.attachmentList.findIndex(
(item) => item.url == file.response.data.url
);
this.fmData.attachmentList.splice(index, 1);
} else if (file.url) {
let index = this.fmData.attachmentList.findIndex(
(item) => item.url == file.url
);
this.fmData.attachmentList.splice(index, 1);
}
},
handleImgExceed() {
this.$message({
type: "warning",
message: "文件数量最多不超过三个",
});
},
watchImg(src) {
window.open(src);
},
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 = "";
let params = { ...this.fmData };
if (this.formType === "add") {
url = "/heart/icServiceProject/serviceProjectAdd";
} else {
url = "/heart/icServiceProject/serviceProjectEdit";
params.serviceProjectId = this.formId;
}
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.$message({
type: "success",
message: "操作成功",
});
this.$emit("afterEdit");
this.btnDisable = false;
} else {
this.btnDisable = false;
this.$message.error(msg);
}
},
handleCancle() {
this.$emit("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;
}
.attachement-list {
}
</style>