123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <template>
- <div>
- <div v-if="!edit" class="input-group-prepend">
- <input class="form-control" v-model="myDisplay" disabled />
- <span
- v-if="mayEdit"
- @click="EditClick()"
- class="input-group-text spanCursor"
- style="color: #60CBEB"
- >
- <eva-icon name="edit-outline" fill="#60CBEB"></eva-icon>
- </span>
- </div>
- <div v-if="edit" class="input-group-prepend">
- <input v-if="type === 'text'" class="form-control" v-model="value" />
- <input v-if="type === 'number'" type="number" class="form-control" v-model="value" />
- <select v-if="type === 'select'" class="form-control" @change="selectionClick">
- <option>Please select</option>
- <option
- v-for="option in selectOptions"
- :value="option[selectValue]"
- :key="option[selectValue]"
- >{{ option[selectText] }}</option
- >
- </select>
- <select v-if="type === 'selectlist'" class="form-control" v-model="value">
- <option v-for="item in selectOptions" :value="item" :key="item">{{ item }}</option>
- </select>
- <!-- <Datetime class="form-control" v-if="type === 'datetime'" v-model="value" /> -->
- <span
- v-if="edit"
- @click="UpdateValue()"
- class="input-group-text spanCursor"
- style="color: #60CBEB"
- >
- <eva-icon name="checkmark-outline" fill="#60CBEB"></eva-icon>
- </span>
- <span v-if="edit" @click="Close()" class="input-group-text spanCursor" style="color: #60CBEB">
- <eva-icon name="close-outline" fill="#60CBEB"></eva-icon>
- </span>
- </div>
- </div>
- </template>
-
- <script>
- export default {
- props: ['value', 'type', 'mayEdit', 'selectOptions', 'selectValue', 'selectText', 'display'],
- data() {
- return {
- edit: false,
- myDisplay: '',
- };
- },
- methods: {
- UpdateValue() {
- this.edit = false;
- if (this.type !== 'select' && this.value) {
- this.$emit('input', this.value);
- this.$emit('change', this.value);
- }
- },
- EditClick() {
- this.edit = true;
- },
- Close() {
- this.edit = false;
- },
- selectionClick(item) {
- if (item.target.options.selectedIndex > 0) {
- if (!this.value) {
- this.myDisplay = this.selectOptions[item.target.options.selectedIndex - 1][
- this.selectText
- ];
- }
- if (this.selectOptions[item.target.options.selectedIndex - 1]) {
- this.$emit('input', this.selectOptions[item.target.options.selectedIndex - 1]);
- this.$emit('change', this.selectOptions[item.target.options.selectedIndex - 1]);
- }
- }
- },
- },
- mounted() {
- if (this.value) {
- // eslint-disable-next-line vue/no-side-effects-in-computed-properties
- this.myDisplay = this.value;
- }
- if (this.value && this.selectText) {
- // eslint-disable-next-line vue/no-side-effects-in-computed-properties
- this.myDisplay = this.value[this.selectText];
- }
- if (this.display) {
- this.myDisplay = this.display;
- }
- },
- computed: {
- // eslint-disable-next-line vue/return-in-computed-property
- checkValue() {
- if (this.value) {
- // eslint-disable-next-line vue/no-side-effects-in-computed-properties
- this.myDisplay = this.value;
- }
- if (this.value && this.selectText) {
- // eslint-disable-next-line vue/no-side-effects-in-computed-properties
- this.myDisplay = this.value[this.selectText];
- }
- if (this.display) {
- // eslint-disable-next-line vue/no-side-effects-in-computed-properties
- this.myDisplay = this.display;
- }
- },
- },
- watch: {
- checkValue() {
- return null;
- },
- },
- };
- </script>
|