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.
679 lines
22 KiB
679 lines
22 KiB
<template>
|
|
<div style="display: flex" v-bind="$attrs">
|
|
<!-- {{ $attrs.value }} -->
|
|
<!-- {{simpleDayOptions}} -->
|
|
<!-- <div v-if="columsType == 'complexTable'" style="color: red; display: block; width: 100%">
|
|
注:服务频次对应每天、每周、每月、每年,均需要设置起止时间
|
|
</div>
|
|
<br /> -->
|
|
<div v-if="columsType == 'complexTable'">
|
|
<div v-if="columsType == 'complexTable'" style="color: red; display: block; width: 100%">
|
|
注:服务频次对应每天、每周、每月、每年,均需要设置起止时间
|
|
<br />
|
|
<br />
|
|
</div>
|
|
<a-table :columns="colums" :data-source="$attrs.value" bordered :pagination="false">
|
|
<template
|
|
v-for="(item, index) in colums"
|
|
:key="index"
|
|
#[item.dataIndex]="text, record, index"
|
|
>
|
|
<!-- {{ text }} -->
|
|
|
|
<a-input
|
|
v-if="
|
|
item.otherConditions
|
|
? item.otherConditions && item.inputType == 'input'
|
|
: item.inputType == 'input'
|
|
"
|
|
style="margin: -5px 0"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex, item)"
|
|
/>
|
|
<div v-else-if="item.inputType == 'select'">
|
|
<div v-if="text.record[item.otherConditions] === 3 && item.dataIndex == 'day'">
|
|
<div style="display: inline-block">
|
|
<a-select
|
|
style="margin: -5px 0"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex)"
|
|
>
|
|
<a-select-option
|
|
v-for="(i, index) in simpleDayOptions"
|
|
:key="index"
|
|
:value="i.value"
|
|
>
|
|
{{ i.label }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
<div style="display: inline-block"> 日</div>
|
|
</div>
|
|
<div v-else-if="text.record[item.otherConditions] === 4 && item.dataIndex == 'month'">
|
|
<div style="display: inline-block">
|
|
<a-select
|
|
style="margin: -5px 0; display: inline-block"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex)"
|
|
>
|
|
<a-select-option
|
|
v-for="(i, index) in item.componentProps.options"
|
|
:key="index"
|
|
:value="i.value"
|
|
>
|
|
{{ i.label }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
|
|
<div style="display: inline-block">月</div>
|
|
</div>
|
|
<div v-else-if="text.record[item.otherConditions] === 4 && item.dataIndex == 'day'">
|
|
<div style="display: inline-block">
|
|
<a-select
|
|
style="margin: -5px 0"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex)"
|
|
>
|
|
<a-select-option
|
|
v-for="(i, index) in item.componentProps.options"
|
|
:key="index"
|
|
:value="i.value"
|
|
>
|
|
{{ i.label }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
<div style="display: inline-block">日</div>
|
|
</div>
|
|
<div v-else-if="text.record[item.otherConditions] === 2 && item.dataIndex == 'week'">
|
|
<a-select
|
|
style="margin: -5px 0"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex)"
|
|
>
|
|
<a-select-option
|
|
v-for="(i, index) in item.componentProps.options"
|
|
:key="index"
|
|
:value="i.value"
|
|
>
|
|
{{ i.label }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- <a-select
|
|
v-else-if="
|
|
text.record[item.otherConditions] == item.otherValue && item.inputType == 'select'
|
|
"
|
|
style="margin: -5px 0"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e.target.value, index, 'name')"
|
|
>
|
|
<a-select-option v-for="(i, index) in item.componentProps.options" :key="index">
|
|
{{ i.label }}
|
|
</a-select-option>
|
|
</a-select> -->
|
|
|
|
<a-time-picker
|
|
v-else-if="
|
|
item.otherConditions
|
|
? item.otherConditions && item.inputType == 'date'
|
|
: item.inputType == 'date'
|
|
"
|
|
style="width: 100px"
|
|
size="small"
|
|
:defaultValue="text.text ? moment(text.text, 'HH:mm:ss') : ''"
|
|
@change="(val, dateStrings) => changeTime(val, dateStrings, text.index, 'startTime')"
|
|
format="HH:mm:ss"
|
|
/>
|
|
<template
|
|
v-else-if="
|
|
item.otherConditions
|
|
? item.otherConditions && item.inputType == 'modal'
|
|
: item.inputType == 'modal'
|
|
"
|
|
>请选择</template
|
|
>
|
|
<template
|
|
v-else-if="
|
|
otherConditions
|
|
? otherConditions && item.inputType == 'input'
|
|
: item.inputType == 'operation'
|
|
"
|
|
>删除</template
|
|
>
|
|
<template v-else>{{ text.text }}</template>
|
|
</template>
|
|
</a-table>
|
|
</div>
|
|
<div v-else-if="columsType == 'normalTable'">
|
|
<!-- {{ $attrs.value }}--900099 -->
|
|
|
|
<a-table :columns="colums" :data-source="$attrs.value" bordered :pagination="false">
|
|
<template
|
|
v-for="(item, index) in colums"
|
|
:key="index"
|
|
#[item.dataIndex]="text, record, index"
|
|
>
|
|
<!-- {{ item }} -->
|
|
<a-input
|
|
v-if="item.inputType == 'input'"
|
|
style="margin: -5px 0"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex, item)"
|
|
/>
|
|
<div v-else-if="item.inputType == 'select'">
|
|
<a-select
|
|
style="margin: -5px 0; display: inline-block"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex)"
|
|
>
|
|
<a-select-option
|
|
v-for="(i, index) in item.componentProps.options"
|
|
:key="index"
|
|
:value="i.value"
|
|
>
|
|
{{ i.label }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
<div v-else-if="item.inputType == 'selectElse'">
|
|
<!-- {{ item.componentProps }} -->
|
|
<a-select
|
|
style="margin: -5px 0; display: inline-block"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex, item)"
|
|
>
|
|
<a-select-option
|
|
v-for="(i, index) in item.componentProps.options"
|
|
:key="index"
|
|
:value="i.value"
|
|
>
|
|
{{ i.label }}
|
|
</a-select-option>
|
|
</a-select>
|
|
</div>
|
|
<div v-else-if="item.inputType == 'selectApi'">
|
|
<NsSelectApi
|
|
v-bind="item.componentProps"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex)"
|
|
/>
|
|
</div>
|
|
<div v-else-if="item.inputType == 'upload'">
|
|
<NvUpload v-bind="item.componentProps" :value="text.text" />
|
|
</div>
|
|
<div v-else-if="item.inputType == 'date'">
|
|
<a-time-picker
|
|
style="width: 100px"
|
|
size="small"
|
|
:value="text.text ? moment(text.text, 'HH:mm:ss') : ''"
|
|
:defaultValue="text.text ? moment(text.text, 'HH:mm:ss') : ''"
|
|
@change="
|
|
(val, dateStrings) => changeTime(val, dateStrings, text.index, item.dataIndex)
|
|
"
|
|
format="HH:mm:ss"
|
|
/></div>
|
|
<template v-else-if="item.inputType == 'modal'">
|
|
<!-- 请选择 -->
|
|
<NsModalTable
|
|
v-bind="{
|
|
...item.componentProps,
|
|
record: text.record,
|
|
valueP: text.text,
|
|
dataIndex: item.dataIndex,
|
|
}"
|
|
@changeTable="changeTable"
|
|
:value="text.text"
|
|
/>
|
|
</template>
|
|
<template v-else-if="item.inputType == 'operation'">
|
|
<span v-for="(it, indexs) in item.componentProps.actionOptions" :key="indexs">
|
|
<span
|
|
:style="{ color: it.color }"
|
|
style="margin-left: 5px"
|
|
@click="optionA(it.value, text.record, text.index)"
|
|
>{{ it.name }}</span
|
|
>
|
|
</span>
|
|
</template>
|
|
<template v-else>{{ text.text }}</template>
|
|
</template>
|
|
<template #footer="currentPageData">
|
|
<!-- {{ currentPageData }} -->
|
|
<span style="font-size: 22px; margin-left: 50%" @click="add(currentPageData)">+</span>
|
|
</template>
|
|
</a-table>
|
|
</div>
|
|
<div v-else>
|
|
<a-row>
|
|
<a-col :span="12">
|
|
<div>未选择</div>
|
|
<br />
|
|
<a-row>
|
|
<a-col :span="12">护理类别:</a-col>
|
|
<a-col :span="12"
|
|
><ns-select :options="optionSlect" @change="handleChangeViewList"
|
|
/></a-col>
|
|
</a-row>
|
|
<br />
|
|
<div>
|
|
<a-table
|
|
:columns="viewColums"
|
|
:data-source="careItems"
|
|
:row-selection="rowSelection"
|
|
:pagination="false"
|
|
bordered
|
|
/>
|
|
</div>
|
|
</a-col>
|
|
<a-col :span="12">
|
|
<div>已选择</div>
|
|
<!-- <br /> -->
|
|
<div style="height: 8px"></div>
|
|
<br />
|
|
<br />
|
|
<br />
|
|
<a-table :columns="colums" :data-source="$attrs.value" :pagination="false" bordered>
|
|
<template
|
|
v-for="(item, index) in colums"
|
|
:key="index"
|
|
#[item.dataIndex]="text, record, index"
|
|
>
|
|
<!-- {{ text }} -->
|
|
|
|
<a-input
|
|
v-if="item.inputType == 'input'"
|
|
style="margin: -5px 0"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex, item)"
|
|
/>
|
|
|
|
<a-select
|
|
v-else-if="item.inputType == 'select'"
|
|
style="margin: -5px 0"
|
|
:value="text.text"
|
|
@change="(e) => handleChangeIndex(e, text.index, item.dataIndex, item)"
|
|
>
|
|
<a-select-option v-for="(i, index) in item.componentProps.options" :key="index">
|
|
{{ i.label }}
|
|
</a-select-option>
|
|
</a-select>
|
|
<template v-else-if="item.inputType == 'modal'">请选择</template>
|
|
<template v-else-if="item.inputType == 'operation'"
|
|
><span @click="handleDelete(text.index)" style="cursor: pointer">
|
|
删除
|
|
</span></template
|
|
>
|
|
<template v-else>{{ text.text }}</template>
|
|
</template>
|
|
</a-table>
|
|
</a-col>
|
|
</a-row>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script lang="ts">
|
|
import moment from 'moment';
|
|
import { defineComponent, ref, watch } from 'vue';
|
|
import { NsMessage } from '../../message';
|
|
import { http } from '/nerv-lib/util/http';
|
|
import NsModalTable from './modal-table.vue';
|
|
import NvUpload from './uplods.vue';
|
|
export default defineComponent({
|
|
name: 'NsEtable',
|
|
components: {
|
|
NsModalTable,
|
|
NvUpload,
|
|
},
|
|
props: {
|
|
colums: {
|
|
type: Array,
|
|
},
|
|
viewColums: {
|
|
type: Array,
|
|
},
|
|
tableData: {
|
|
type: Array,
|
|
},
|
|
attribute: {
|
|
type: String,
|
|
},
|
|
onchange: {
|
|
type: Function,
|
|
},
|
|
columsType: {
|
|
type: String,
|
|
},
|
|
getChildrenOptions: {
|
|
type: Function,
|
|
},
|
|
addlist: {
|
|
type: Object,
|
|
},
|
|
},
|
|
emits: ['change', 'updata:longLat', 'validate', 'getChildrenOptions'],
|
|
setup(props, context) {
|
|
let data = [];
|
|
let propsData = ref();
|
|
let ids = ref(9);
|
|
const dependency = ref();
|
|
const selectElseOption = ref([]);
|
|
const rowSelection = {
|
|
type: 'checkbox',
|
|
onChange: (selectedRowKeys: [], selectedRows: []) => {
|
|
let dpData = context.attrs.value ? JSON.parse(JSON.stringify(context.attrs)) : [];
|
|
const newData = [...dpData.value];
|
|
selectedRows.forEach((item) => {
|
|
newData.push({
|
|
nursingItemUuid: item['uuid'],
|
|
nursingItemName: item['itemName'],
|
|
frequency: 1,
|
|
times: 1,
|
|
});
|
|
});
|
|
context.emit('change', newData);
|
|
},
|
|
};
|
|
const optionSlect = [
|
|
{
|
|
label: '全部',
|
|
value: 'all',
|
|
},
|
|
{
|
|
label: '生活护理',
|
|
value: 1,
|
|
},
|
|
{
|
|
label: '医疗护理',
|
|
value: 2,
|
|
},
|
|
{
|
|
label: '康复护理',
|
|
value: 3,
|
|
},
|
|
];
|
|
propsData = context.attrs.value ? JSON.parse(JSON.stringify(context.attrs.value)) : [];
|
|
console.log(propsData, '98777');
|
|
let simpleDayOptions = ref([]);
|
|
for (let i = 0; i < 28; i++) {
|
|
let item = {
|
|
label: '' + (i + 1),
|
|
value: i + 1,
|
|
};
|
|
simpleDayOptions.value.push(item);
|
|
}
|
|
|
|
let careItems = ref([]);
|
|
const handleChangeViewList = (value) => {
|
|
let api = '/api/pension/pension/objs/NursingItem';
|
|
|
|
http
|
|
.get(api, {
|
|
itemType: value == 'all' ? '' : value,
|
|
enable: true,
|
|
pageSize: 10,
|
|
})
|
|
.then((res) => {
|
|
if (res && res.success) {
|
|
careItems.value = res.data.data;
|
|
// NsMessage.success('操作成功');
|
|
}
|
|
})
|
|
.catch(() => {
|
|
NsMessage.error('列表获取失败');
|
|
});
|
|
};
|
|
handleChangeViewList('all');
|
|
|
|
const add = (e) => {
|
|
console.log(props.addlist, 'opopop');
|
|
// let data = {
|
|
// regionUuid: null,
|
|
// inspectionTime: null,
|
|
// personList: null,
|
|
// relation: null,
|
|
// // uuid:
|
|
// };
|
|
let list = JSON.parse(JSON.stringify(props.addlist));
|
|
let data = { ...list };
|
|
let edList = context.attrs.value ? JSON.parse(JSON.stringify(context.attrs.value)) : [];
|
|
ids.value += 1;
|
|
edList.push({ ...data, uuid: ids.value + 'uuid' });
|
|
context.emit('change', edList);
|
|
// console.log(e, JSON.parse(JSON.stringify(context.attrs.value)), 'add');
|
|
};
|
|
|
|
const changeTable = (item) => {
|
|
let currentList = JSON.parse(JSON.stringify(context.attrs.value));
|
|
currentList &&
|
|
currentList instanceof Array &&
|
|
currentList.length > 0 &&
|
|
currentList.forEach((its) => {
|
|
if (its.uuid == item.uuid) {
|
|
its = Object.assign(its, item);
|
|
}
|
|
});
|
|
|
|
context.emit('change', currentList);
|
|
};
|
|
|
|
// 表格列操作方法
|
|
const optionA = (name, actionInfo, ind) => {
|
|
let edList = context.attrs.value ? JSON.parse(JSON.stringify(context.attrs.value)) : [];
|
|
|
|
if (name == 'delete') {
|
|
edList.splice(ind, 1);
|
|
// console.log(edList, 'edlist');
|
|
} else if (name == 'copy') {
|
|
// console.log('00000');
|
|
ids.value += 1;
|
|
edList.push({ ...actionInfo, uuid: ids.value + 'uuid' });
|
|
}
|
|
context.emit('change', edList);
|
|
};
|
|
|
|
const getElseOptins = (name, value, fieldName, index) => {
|
|
console.log(name, value, fieldName, index, 'zhougg');
|
|
let acinfo = props && props.colums && props.colums[index];
|
|
console.log(acinfo, 'acinfo');
|
|
let api = acinfo.componentProps.api;
|
|
let params = {
|
|
...acinfo.componentProps.params,
|
|
[name]: value,
|
|
};
|
|
console.log(params, 'acparams');
|
|
|
|
// let api = '/api/pension/pension/objs/NursingItem';
|
|
http
|
|
.get(api, { ...params })
|
|
.then((res) => {
|
|
if (res && res.success) {
|
|
console.log(acinfo.componentProps.selectElseOption, 'acinfo.componentProps');
|
|
res.data &&
|
|
res.data.forEach((item) => {
|
|
if (item.dictValue == value) {
|
|
let arr = [];
|
|
item.subList &&
|
|
item.subList.forEach((it) => {
|
|
arr.push({
|
|
label: it.dictName,
|
|
value: it.dictValue,
|
|
});
|
|
});
|
|
selectElseOption.value = arr;
|
|
console.log(item.subList, 'sublist');
|
|
}
|
|
});
|
|
// careItems.value = res.data.data;
|
|
// NsMessage.success('操作成功');
|
|
}
|
|
})
|
|
.catch(() => {
|
|
NsMessage.error('列表获取失败');
|
|
});
|
|
};
|
|
// dependency
|
|
watch(dependency, (newValue, oldValue) => {
|
|
console.log('old', oldValue);
|
|
console.log('new', newValue);
|
|
});
|
|
|
|
return {
|
|
data,
|
|
simpleDayOptions,
|
|
rowSelection,
|
|
optionSlect,
|
|
handleChangeViewList,
|
|
careItems,
|
|
add,
|
|
changeTable,
|
|
optionA,
|
|
getElseOptins,
|
|
selectElseOption,
|
|
};
|
|
},
|
|
data() {
|
|
return {
|
|
editingKey: '',
|
|
propsList: [],
|
|
Month2Day: {
|
|
1: 31,
|
|
2: 28,
|
|
3: 31,
|
|
4: 30,
|
|
5: 31,
|
|
6: 30,
|
|
7: 31,
|
|
8: 31,
|
|
9: 30,
|
|
10: 31,
|
|
11: 30,
|
|
12: 31,
|
|
},
|
|
};
|
|
},
|
|
created() {
|
|
this.propsList = this.$attrs.value ? JSON.parse(JSON.stringify(this.$attrs.value)) : [];
|
|
},
|
|
methods: {
|
|
moment,
|
|
changeTime(val, dateStrings, key, type) {
|
|
let datapro = this.$attrs.value ? JSON.parse(JSON.stringify(this.$attrs.value)) : [];
|
|
const newData = [...datapro];
|
|
const target = newData.filter((item, index) => key === index)[0];
|
|
if (type == 'startTime' && target['endTime']) {
|
|
if (this.timeCompare(dateStrings, target['endTime'])) {
|
|
NsMessage.error('开始时间不能大于结束时间');
|
|
}
|
|
} else if (type == 'endTime') {
|
|
if (this.timeCompare(target['startTime'], dateStrings)) {
|
|
NsMessage.error('开始时间不能大于结束时间');
|
|
}
|
|
}
|
|
if (target) {
|
|
target[type] = dateStrings;
|
|
this.$emit('change', newData);
|
|
// this.$emit('validate', false);
|
|
// this.propsList = newData;
|
|
}
|
|
},
|
|
|
|
timeCompare(start, end) {
|
|
let flag = true;
|
|
if (!start || !end) return true;
|
|
let startH = +start.split(':')[0];
|
|
let startM = +start.split(':')[1];
|
|
let endH = +end.split(':')[0];
|
|
let endM = +end.split(':')[1];
|
|
// 开始小时大于结束小时
|
|
if (startH > endH) {
|
|
flag = false;
|
|
} else if (startH == endH) {
|
|
// 小时相等时,开始分钟大于结束分钟
|
|
if (startM >= endM) {
|
|
flag = false;
|
|
}
|
|
}
|
|
return flag;
|
|
},
|
|
handleChangeIndex(value, key, type, item) {
|
|
console.log(value, key, type, 'zhouhaha');
|
|
let propsInfo = this.$attrs.value ? JSON.parse(JSON.stringify(this.$attrs.value)) : [];
|
|
const newData = [...propsInfo];
|
|
console.log(newData, 'newData');
|
|
console.log([...this.propsList], 'newData');
|
|
console.log(this.propsList, 'newData');
|
|
const target = newData.filter((item, index) => key === index)[0];
|
|
if (type == 'month') {
|
|
this.colums &&
|
|
this.colums.forEach((item: any) => {
|
|
if (item.dataIndex == 'day') {
|
|
item.componentProps.options = this.setOptions(this.Month2Day[value], 'dayOptions');
|
|
}
|
|
});
|
|
}
|
|
console.log(target, 'target');
|
|
if (target) {
|
|
target[type] = value;
|
|
console.log(newData, 'newData');
|
|
this.$emit('change', newData);
|
|
// this.propsList = newData;
|
|
}
|
|
this.colums &&
|
|
this.colums.forEach((item, index) => {
|
|
console.log(item, item.dependency, '564');
|
|
if (item.dependency == type) {
|
|
// console.log('lopppp');
|
|
this.$emit('getChildrenOptions', item.dependency, value, item.dataIndex);
|
|
this.getElseOptins(item.dependency, value, item.dataIndex, index);
|
|
}
|
|
});
|
|
},
|
|
handleDelete(e) {
|
|
let data = this.$attrs.value ? JSON.parse(JSON.stringify(this.$attrs.value)) : [];
|
|
|
|
let newData = data.filter((item, index) => e !== index);
|
|
// console.log(newData);
|
|
this.$emit('change', newData);
|
|
},
|
|
setOptions(number: number, type: string) {
|
|
let arr = [];
|
|
for (let i = 0; i < number; i++) {
|
|
let item = {
|
|
label: '' + (i + 1),
|
|
value: i + 1,
|
|
};
|
|
arr.push(item);
|
|
}
|
|
return arr;
|
|
},
|
|
},
|
|
});
|
|
</script>
|
|
<style lang="less" scoped>
|
|
input::-webkit-outer-spin-button,
|
|
input::-webkit-inner-spin-button {
|
|
-webkit-appearance: none;
|
|
}
|
|
#map-container {
|
|
width: 600px;
|
|
height: 400px;
|
|
}
|
|
.leftBox,
|
|
.rightBox {
|
|
flex: 1;
|
|
}
|
|
.inputArea {
|
|
display: flex;
|
|
line-height: 30px;
|
|
}
|
|
.inputSearch {
|
|
.inputAdress {
|
|
width: 300px;
|
|
margin-right: 10px;
|
|
}
|
|
}
|
|
</style>
|
|
|