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.
764 lines
20 KiB
764 lines
20 KiB
<template>
|
|
<div>
|
|
<div class="dialog-h-content scroll-h">
|
|
|
|
<el-form ref="ref_form"
|
|
:inline="true"
|
|
:model="formData"
|
|
:rules="dataRule"
|
|
:disabled="formType==='detail'"
|
|
class="div_form">
|
|
|
|
<el-form-item label="政策级别"
|
|
style="display: block"
|
|
label-width="150px"
|
|
prop="policyLevel">
|
|
<el-select class="item_width_2"
|
|
v-model="formData.policyLevel"
|
|
placeholder="全部"
|
|
clearable>
|
|
<el-option v-for="item in policyLevelArray"
|
|
:key="item.value"
|
|
:label="item.label"
|
|
:value="item.value">
|
|
</el-option>
|
|
</el-select>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="政策日期"
|
|
style="display: block"
|
|
label-width="150px"
|
|
prop="startDate">
|
|
<el-date-picker v-model="formData.startDate"
|
|
class="item_width_2"
|
|
type="date"
|
|
value-format="yyyy-MM-dd"
|
|
value="yyyy-MM-dd"
|
|
placeholder="开始时间">
|
|
</el-date-picker>
|
|
<span class="u-data-tag">至</span>
|
|
<el-date-picker v-model="formData.endDate"
|
|
class="item_width_2 u-data-tag"
|
|
type="date"
|
|
value-format="yyyy-MM-dd"
|
|
value="yyyy-MM-dd"
|
|
placeholder="结束时间">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="政策标题"
|
|
prop="title"
|
|
label-width="150px"
|
|
style="display: block">
|
|
<el-input class="item_width_1"
|
|
placeholder="请输入政策标题"
|
|
v-model="formData.title">
|
|
</el-input>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="政策内容"
|
|
prop="content"
|
|
label-width="150px"
|
|
style="display: block">
|
|
<el-input class="item_width_3"
|
|
type="textarea"
|
|
maxlength="1000"
|
|
show-word-limit
|
|
:rows="10"
|
|
placeholder="请输入政策内容"
|
|
v-model="formData.content"></el-input>
|
|
</el-form-item>
|
|
|
|
<div v-for="(item,index) in formData.ruleList"
|
|
:key="index"
|
|
style="margin-bottom:15px">
|
|
|
|
<el-form-item :label="'政策细则'+(index+1)"
|
|
:prop="`ruleList.${index}.ruleName`"
|
|
:rules="[
|
|
{ required: true, message: '政策细则'+(index+1)+'不能为空', trigger: 'change' },
|
|
]"
|
|
label-width="150px"
|
|
style="display: block">
|
|
<el-input class="item_width_short"
|
|
placeholder="请输入政策细则名称"
|
|
v-model="item.ruleName">
|
|
</el-input>
|
|
|
|
<el-button v-if="index!==0"
|
|
type="danger"
|
|
size="mini"
|
|
plain
|
|
style="margin-left:20px"
|
|
@click="delRule(index)">删除细则</el-button>
|
|
</el-form-item>
|
|
<div class="item_rule">
|
|
<div class="item_label">{{'匹配规则'+(index+1)}}</div>
|
|
|
|
<rule :ref="'ref_rule'+index"
|
|
:formType="formType"
|
|
:index="index"></rule>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="btn-add-rule">
|
|
<el-button type="primary"
|
|
size="mini"
|
|
@click="addRule">增加细则</el-button>
|
|
</div>
|
|
|
|
<el-form-item label="匹配资源类型"
|
|
prop="serviceScope"
|
|
label-width="150px"
|
|
style="display: block">
|
|
<el-cascader class="item_width_1"
|
|
ref="myCascader"
|
|
v-model="demandIdArray"
|
|
:options="demandOptions"
|
|
:props="optionProps"
|
|
@change="handleCateSlect"></el-cascader>
|
|
</el-form-item>
|
|
|
|
<el-form-item class="block"
|
|
label="附件"
|
|
label-width="150px"
|
|
prop="attach">
|
|
<el-upload :headers="$getElUploadHeaders()"
|
|
class="upload-demo"
|
|
:action="uploadUlr"
|
|
accept=".doc,.pdf,.xls,.docx,.xlsx,.jpg,.png,.jpeg,.bmp,.mp4,.wma,.m4a,.mp3"
|
|
:on-success="handleFileSuccess"
|
|
:on-remove="handleFileRemove"
|
|
:on-preview="handleFileDownload"
|
|
:limit="3"
|
|
:before-upload="beforeUpload"
|
|
:file-list="fileList">
|
|
<el-button size="small"
|
|
:disabled="fileList.length===3"
|
|
type="primary">点击上传</el-button>
|
|
<div slot="tip"
|
|
class="el-upload__tip">支持图片、word、pdf</div>
|
|
</el-upload>
|
|
</el-form-item>
|
|
|
|
</el-form>
|
|
|
|
</div>
|
|
|
|
<div class="div_btn">
|
|
<el-button size="small"
|
|
@click="handleCancle">取 消</el-button>
|
|
<el-button v-if="formType!=='detail'"
|
|
size="small"
|
|
type="primary"
|
|
:disabled="btnDisable"
|
|
@click="handleAdd">确 定</el-button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapGetters } from 'vuex'
|
|
import { Loading } from 'element-ui' // 引入Loading服务
|
|
import { requestPost } from '@/js/dai/request'
|
|
import rule from './rule'
|
|
|
|
|
|
|
|
let loading // 加载动画
|
|
export default {
|
|
data () {
|
|
let endDisabledDate = (time) => {//这个关键属性我们一定要写在data的里面并且return的外面,这是动态改变区间的关键
|
|
let nowData = Date.now()
|
|
if (this.formData.serviceTimeStart) {
|
|
let serviceTimeStart = new Date(this.formData.serviceTimeStart)
|
|
return time.getTime() > nowData || time.getTime() < serviceTimeStart || time.getTime() === serviceTimeStart
|
|
} else {
|
|
return time.getTime() > nowData
|
|
}
|
|
|
|
}
|
|
let startDisabledDate = (time) => {//这个关键属性我们一定要写在data的里面并且return的外面,这是动态改变区间的关键
|
|
let nowData = Date.now()
|
|
return time.getTime() > nowData
|
|
}
|
|
|
|
return {
|
|
|
|
ruleList: [
|
|
{
|
|
ruleName: '',
|
|
resiRuleList: [],
|
|
houseRuleList: [],
|
|
statRuleList: []
|
|
}
|
|
],
|
|
|
|
policyLevelArray: [],
|
|
|
|
btnDisable: false,
|
|
demandOptions: [],
|
|
demandIdArray: [],
|
|
|
|
optionProps: {
|
|
multiple: true,
|
|
// value: 'objectId',
|
|
// label: 'objectName',
|
|
// children: 'children',
|
|
checkStrictly: true
|
|
},
|
|
|
|
formData: {
|
|
policyLevel: '',//政府级别
|
|
startDate: '',//起始时间yyyy-MM-dd
|
|
endDate: '',//截止时间yyyy-MM-dd
|
|
title: '',//
|
|
content: '',//
|
|
categoryList: [],
|
|
attachmentList: [],
|
|
ruleList: [
|
|
{
|
|
ruleName: '',
|
|
resiRuleList: [],
|
|
houseRuleList: [],
|
|
statRuleList: []
|
|
}
|
|
],
|
|
|
|
},
|
|
|
|
endPickerOptions: {
|
|
disabledDate: endDisabledDate
|
|
},
|
|
startPickerOptions: {
|
|
disabledDate: startDisabledDate
|
|
},
|
|
|
|
fileList: [],
|
|
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadvariedfile',
|
|
|
|
}
|
|
},
|
|
|
|
watch: {
|
|
"formData.serviceTimeEnd": function (val) {
|
|
if (val && val != '') {
|
|
let arrayTemp = val.split(' ')
|
|
this.formData.serviceTimeEnd = arrayTemp[0] + ' 23:59:59'
|
|
}
|
|
|
|
},
|
|
},
|
|
components: { rule },
|
|
async mounted () {
|
|
this.startLoading()
|
|
|
|
this.getDictOptions();
|
|
await this.loadDemandoption()
|
|
|
|
if (this.formType === 'add') {
|
|
this.$refs.ref_form.resetFields();
|
|
|
|
} else {
|
|
this.loadFormInfo()
|
|
|
|
}
|
|
|
|
this.endLoading()
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
addRule () {
|
|
let obj = {
|
|
name: '',
|
|
detail: []
|
|
}
|
|
|
|
this.formData.ruleList.push(obj)
|
|
},
|
|
delRule (index) {
|
|
this.formData.ruleList.splice(index, 1);
|
|
},
|
|
|
|
async loadFormInfo () {
|
|
const url = '/heart/policy/detail/' + this.policyId
|
|
|
|
let params = {}
|
|
|
|
const { data, code, msg } = await requestPost(url, params)
|
|
|
|
if (code === 0) {
|
|
this.demandIdArray = []
|
|
data.categoryList.forEach(element => {
|
|
let arr = element.codePath.split(',')
|
|
this.demandIdArray.push(arr)
|
|
});
|
|
this.formData.ruleList = data.ruleList
|
|
|
|
|
|
this.formData = data
|
|
|
|
if (data.attachmentList) {
|
|
this.fileList = data.attachmentList
|
|
}
|
|
|
|
|
|
this.$nextTick(() => {
|
|
data.ruleList.forEach((element, index) => {
|
|
|
|
this.$refs['ref_rule' + index][0].setRule(element.resiRuleList, element.houseRuleList, element.statRuleList)
|
|
});
|
|
})
|
|
|
|
|
|
} else {
|
|
this.$message.error(msg)
|
|
}
|
|
|
|
|
|
},
|
|
|
|
async getDictOptions () {
|
|
|
|
this.$http
|
|
.post("/sys/dict/data/dictlist", {
|
|
dictType: "policy_level",
|
|
})
|
|
.then(({ data: res }) => {
|
|
if (res.code !== 0) {
|
|
return this.$message.error(res.msg);
|
|
} else {
|
|
this.policyLevelArray = res.data;
|
|
}
|
|
})
|
|
.catch(() => {
|
|
return this.$message.error("网络错误");
|
|
});
|
|
|
|
},
|
|
|
|
|
|
// 获取服务范围树
|
|
loadDemandoption () {
|
|
const url = '/governance/icresidemanddict/demandoption'
|
|
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/isServiceProject/service/serviceScopeTree'
|
|
let params = {}
|
|
window.app.ajax.post(
|
|
url,
|
|
params,
|
|
(data, rspMsg) => {
|
|
|
|
this.demandOptions = this.getFlagData(
|
|
this.getTreeData(data),
|
|
"usableFlag"
|
|
);
|
|
},
|
|
(rspMsg, data) => {
|
|
this.$message.error(rspMsg)
|
|
}
|
|
)
|
|
|
|
},
|
|
|
|
|
|
handleCateSlect (val) {
|
|
debugger
|
|
console.log("val", val);
|
|
let arr = []
|
|
val.forEach((item) => {
|
|
let obj = {
|
|
codePath: item.join(','),
|
|
categoryCode: item[item.length - 1]
|
|
}
|
|
|
|
arr.push(obj)
|
|
});
|
|
|
|
console.log("arr", arr);
|
|
this.formData.categoryList = arr
|
|
|
|
},
|
|
|
|
async handleAdd () {
|
|
|
|
var oDate1 = new Date(this.formData.startDate);
|
|
var oDate2 = new Date(this.formData.endDate);
|
|
if (oDate1.getTime() > oDate2.getTime()) {
|
|
this.$message.error('结束日期必须大于开始日期')
|
|
return false
|
|
}
|
|
|
|
|
|
let isOk = false
|
|
|
|
for (let index = 0; index < this.formData.ruleList.length; index++) {
|
|
let oneRule = this.formData.ruleList[index]
|
|
|
|
let refObj = this.$refs['ref_rule' + index][0]
|
|
|
|
refObj.getRule()
|
|
|
|
if (refObj.okflag) {
|
|
|
|
if (!refObj.personChecked && !refObj.houseChecked && !refObj.staticChecked) {
|
|
this.$message.error('请选择匹配规则' + (index + 1))
|
|
isOk = false
|
|
break
|
|
} else {
|
|
|
|
if (refObj.personChecked) {
|
|
oneRule.resiRuleList = refObj.resiRuleList
|
|
oneRule.resiRuleList.forEach(element => {
|
|
element.itemList = []
|
|
element.colOption = []
|
|
|
|
if (!element.colValLabel) {
|
|
element.colValLabel = element.colVal
|
|
}
|
|
if (!element.nextLogicalRelName) {
|
|
element.nextLogicalRelName = ''
|
|
}
|
|
|
|
element.ruleDesc = element.itemGroupName + element.itemLabel + element.queryTypeName + element.colValLabel + element.nextLogicalRelName
|
|
|
|
});
|
|
} else {
|
|
oneRule.resiRuleList = []
|
|
}
|
|
|
|
if (refObj.houseChecked) {
|
|
|
|
oneRule.houseRuleList = refObj.houseRuleList
|
|
oneRule.houseRuleList.forEach(element => {
|
|
element.itemList = []
|
|
element.colOption = []
|
|
|
|
if (!element.colValLabel) {
|
|
element.colValLabel = element.colVal
|
|
}
|
|
if (!element.nextLogicalRelName) {
|
|
element.nextLogicalRelName = ''
|
|
}
|
|
|
|
element.ruleDesc = element.itemGroupName + element.itemLabel + element.queryTypeName + element.colValLabel + element.nextLogicalRelName
|
|
|
|
});
|
|
} else {
|
|
oneRule.houseRuleList = []
|
|
}
|
|
|
|
if (refObj.staticChecked) {
|
|
|
|
oneRule.statRuleList = refObj.statRuleList
|
|
|
|
oneRule.statRuleList.forEach(element => {
|
|
element.itemList = []
|
|
element.colOption = []
|
|
|
|
if (!element.colValLabel) {
|
|
element.colValLabel = element.colVal
|
|
}
|
|
if (!element.nextLogicalRelName) {
|
|
element.nextLogicalRelName = ''
|
|
}
|
|
|
|
element.ruleDesc = element.itemGroupName + element.itemLabel + element.queryTypeName + element.colValLabel + element.nextLogicalRelName
|
|
|
|
});
|
|
|
|
} else {
|
|
oneRule.statRuleList = []
|
|
}
|
|
|
|
isOk = true
|
|
}
|
|
|
|
} else {
|
|
isOk = false
|
|
break
|
|
|
|
|
|
}
|
|
}
|
|
|
|
if (!isOk) {
|
|
return false
|
|
}
|
|
|
|
// this.formData.ruleList = this.ruleList
|
|
console.log(this.formData.ruleList)
|
|
|
|
// return false
|
|
|
|
|
|
this.btnDisable = true
|
|
setTimeout(() => {
|
|
this.btnDisable = false
|
|
}, 5000)
|
|
this.$refs['ref_form'].validate((valid, messageObj) => {
|
|
if (!valid) {
|
|
// app.util.validateRule(messageObj)
|
|
this.btnDisable = false
|
|
} else {
|
|
this.addFuwu()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
async addFuwu () {
|
|
console.log(this.formData)
|
|
this.formData.attachmentList = [...this.fileList]
|
|
let url = '/heart/policy/add'
|
|
|
|
if (this.formType === 'add' || this.formType === 'copy') {
|
|
url = '/heart/policy/add'
|
|
this.formData.policyId = ''
|
|
} else {
|
|
url = '/heart/policy/update'
|
|
this.formData.policyId = this.policyId
|
|
}
|
|
|
|
// const url = 'http://yapi.elinkservice.cn/mock/245/heart/icServiceProject/service/initiate'
|
|
let params = {
|
|
|
|
...this.formData
|
|
}
|
|
|
|
const { data, code, msg } = await requestPost(url, params)
|
|
|
|
if (code === 0) {
|
|
this.$message.success('操作成功')
|
|
this.resetData()
|
|
this.$emit('handleOk')
|
|
} else {
|
|
this.btnDisable = false
|
|
this.$message.error(msg)
|
|
}
|
|
},
|
|
|
|
getTreeData (data) {
|
|
if (!Array.isArray(data)) return [];
|
|
let arr = data.map((item) => {
|
|
let _item = {};
|
|
if (item.children) {
|
|
if (item.children.length === 0)
|
|
_item = { ...item, children: undefined };
|
|
else _item = { ...item, children: this.getTreeData(item.children) };
|
|
} else {
|
|
_item = { ...item };
|
|
}
|
|
return _item;
|
|
});
|
|
return arr;
|
|
},
|
|
getFlagData (data, flag) {
|
|
if (!Array.isArray(data)) return [];
|
|
let arr1 = data.filter((item) => item[flag]);
|
|
let arr2 = arr1.map((item) => {
|
|
if (item.children)
|
|
return { ...item, children: this.getFlagData(item.children, flag) };
|
|
else return item;
|
|
});
|
|
// console.log('arrr-oppp', arr2)
|
|
return arr2;
|
|
},
|
|
|
|
beforeUpload (file) {
|
|
const array = file.name.split('.')
|
|
const extension = array[array.length - 1]
|
|
|
|
const formatarray = ['jpg', 'png', 'jpeg', 'bmp', 'mp4', 'wma', 'm4a', 'mp3', 'doc', 'docx', 'xls', 'xlsx', 'pdf']
|
|
|
|
if (formatarray.indexOf(extension) === -1) {
|
|
this.$message.error('只支持图片、word、pdf')
|
|
return false
|
|
}
|
|
|
|
},
|
|
|
|
handleFileRemove (file) {
|
|
|
|
if (file && file.status === "success") {
|
|
this.fileList.splice(this.fileList.findIndex(item => item.uid === file.uid), 1)
|
|
}
|
|
},
|
|
|
|
handleFileSuccess (res, file) {
|
|
|
|
if (res.code === 0 && res.msg === 'success') {
|
|
const array = file.name.split('.')
|
|
const fileType = array[array.length - 1]
|
|
|
|
const picArray = ['jpg', 'png', 'jpeg', 'bmp']
|
|
const videoarray = ['mp4', 'wma', 'm4a']
|
|
const docArray = ['doc', 'docx', 'xls', 'xlsx', 'pdf']
|
|
const mp3Array = ['mp3']
|
|
|
|
if (picArray.indexOf(fileType) > -1) {
|
|
file.attachmentFormat = 'image'
|
|
} else if (videoarray.indexOf(fileType) > -1) {
|
|
file.attachmentFormat = 'video'
|
|
} else if (docArray.indexOf(fileType) > -1) {
|
|
file.attachmentFormat = 'doc'
|
|
} else if (mp3Array.indexOf(fileType) > -1) {
|
|
file.attachmentFormat = 'voice'
|
|
}
|
|
|
|
file.url = res.data.url
|
|
file.type = fileType
|
|
|
|
file.attachmentName = file.name
|
|
file.attachmentType = file.type
|
|
file.attachmentUrl = file.url
|
|
|
|
this.fileList.push(file)
|
|
console.log(this.fileList)
|
|
} else this.$message.error(res.msg)
|
|
},
|
|
|
|
//下载
|
|
handleFileDownload (file) {
|
|
|
|
var a = document.createElement('a');
|
|
var event = new MouseEvent('click');
|
|
a.download = file.name;
|
|
console.log(a)
|
|
a.href = file.url;
|
|
a.dispatchEvent(event);
|
|
|
|
|
|
},
|
|
handleCancle () {
|
|
this.resetData()
|
|
this.$emit('handleClose')
|
|
|
|
},
|
|
//下载
|
|
handleFileDownload (file) {
|
|
|
|
var a = document.createElement('a');
|
|
var event = new MouseEvent('click');
|
|
a.download = file.name;
|
|
console.log(a)
|
|
a.href = file.url;
|
|
a.dispatchEvent(event);
|
|
|
|
|
|
},
|
|
|
|
resetData () {
|
|
this.ruleList = []
|
|
this.formData = {
|
|
policyLevel: '',//政府级别
|
|
startDate: '',//起始时间yyyy-MM-dd
|
|
endDate: '',//截止时间yyyy-MM-dd
|
|
title: '',//
|
|
content: '',//
|
|
categoryList: [],
|
|
attachmentList: [],
|
|
ruleList: [],
|
|
}
|
|
},
|
|
// 开启加载动画
|
|
startLoading () {
|
|
loading = Loading.service({
|
|
lock: true, // 是否锁定
|
|
text: '正在加载……', // 加载中需要显示的文字
|
|
background: 'rgba(0,0,0,.7)' // 背景颜色
|
|
})
|
|
},
|
|
// 结束加载动画
|
|
endLoading () {
|
|
// clearTimeout(timer);
|
|
if (loading) {
|
|
loading.close()
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
dataRule () {
|
|
|
|
|
|
// this.ruleList.forEach((element, index) => {
|
|
// let one = [
|
|
// { required: true, message: '政策细则' + (index + 1) + '不能为空', trigger: 'blur' }
|
|
// ]
|
|
// rules['ruleName' + (index + 1)] = one
|
|
|
|
// });
|
|
|
|
|
|
|
|
return {
|
|
|
|
policyLevel: [
|
|
{ required: true, message: '政策级别不能为空', trigger: 'change' }
|
|
],
|
|
startDate: [
|
|
{ required: true, message: '政策日期不能为空', trigger: 'change' }
|
|
],
|
|
title: [
|
|
{ required: true, message: '政策标题不能为空', trigger: 'change' }
|
|
],
|
|
|
|
|
|
|
|
}
|
|
},
|
|
|
|
|
|
},
|
|
props: {
|
|
|
|
policyId: {
|
|
type: String,
|
|
required: ''
|
|
},
|
|
|
|
formType: { //表单操作类型 add新增,edit编辑,detail详情,feedback反馈
|
|
type: String,
|
|
required: ''
|
|
},
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped >
|
|
@import "@/assets/scss/modules/management/form-main.scss";
|
|
|
|
.btn-add-rule {
|
|
margin-left: 150px;
|
|
display: flex;
|
|
justify-content: flex-start;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.item_width_short {
|
|
width: 380px;
|
|
}
|
|
|
|
.item_rule {
|
|
display: flex;
|
|
justify-content: flex-start;
|
|
}
|
|
.item_label {
|
|
flex: 0 0 150px;
|
|
line-height: 30px;
|
|
text-align: right;
|
|
padding-right: 12px;
|
|
}
|
|
.item_label:before {
|
|
content: "*";
|
|
color: #f56c6c;
|
|
margin-right: 4px;
|
|
}
|
|
</style>
|
|
|