183 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
<template>
 | 
						|
  <box-content>
 | 
						|
    <div class="search">
 | 
						|
      <SearchForm
 | 
						|
        size="mini"
 | 
						|
        :that="this"
 | 
						|
        :search-data="searchData"
 | 
						|
        :search-form="setting_form"
 | 
						|
        :search-handle="setting_handle"
 | 
						|
        @search="handleSearch"
 | 
						|
        @reset="handleReset"
 | 
						|
      />
 | 
						|
      <span style="margin-left:auto;">
 | 
						|
        <el-button type="primary" size="small" style="margin-left:auto;" @click="handleAdd">New</el-button>
 | 
						|
      </span>
 | 
						|
    </div>
 | 
						|
    <base-table
 | 
						|
      v-loading="loading"
 | 
						|
      :columns="setting_cols"
 | 
						|
      :list="list"
 | 
						|
      :search-data="searchData"
 | 
						|
      :total="total"
 | 
						|
      @getList="getList"
 | 
						|
      @edit="handleEdit"
 | 
						|
      @delete="handleDelete"
 | 
						|
      @sortByColumn="sortByColumn"
 | 
						|
    >
 | 
						|
      <!-- 选择自定义slot -->
 | 
						|
      <template slot="modalitySlot" slot-scope="{scope}">
 | 
						|
        {{ scope.row.ModalityList && scope.row.ModalityList.length>0?scope.row.ModalityList.join(', '):'' }}
 | 
						|
      </template>
 | 
						|
    </base-table>
 | 
						|
    <setting-form v-if="setting_model.visible" :data="rowData" @close="closeModel" />
 | 
						|
  </box-content>
 | 
						|
</template>
 | 
						|
<script>
 | 
						|
 | 
						|
import { getQATemplateItemList, deleteQATemplateItem } from '@/api/dictionary'
 | 
						|
import { getBasicDataSelects } from '@/api/dictionary/dictionary'
 | 
						|
import { setting_cols, setting_form, setting_handle, setting_model } from './template'
 | 
						|
import BoxContent from '@/components/BoxContent'
 | 
						|
import SearchForm from '@/components/BaseForm/search-form'
 | 
						|
import BaseTable from '@/components/BaseTable'
 | 
						|
import SettingForm from './components/SettingForm.vue'
 | 
						|
const searchDataDefault = () => {
 | 
						|
  return {
 | 
						|
    ModalityId: '',
 | 
						|
    PageIndex: 1,
 | 
						|
    PageSize: 20
 | 
						|
  }
 | 
						|
}
 | 
						|
export default {
 | 
						|
  name: 'TemplateSettings',
 | 
						|
  components: { BoxContent, SearchForm, BaseTable, SettingForm },
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      setting_cols,
 | 
						|
      setting_form,
 | 
						|
      setting_handle,
 | 
						|
      setting_model,
 | 
						|
      list: [],
 | 
						|
      loading: false,
 | 
						|
      total: 0,
 | 
						|
      searchData: searchDataDefault(),
 | 
						|
      rowData: {},
 | 
						|
      readingType: {}
 | 
						|
    }
 | 
						|
  },
 | 
						|
  mounted() {
 | 
						|
    this.getList()
 | 
						|
    this.getInfo()
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    getList() {
 | 
						|
      this.loading = true
 | 
						|
      getQATemplateItemList(this.searchData).then(res => {
 | 
						|
        this.loading = false
 | 
						|
        this.list = res.Result.CurrentPageData
 | 
						|
        this.total = res.Result.TotalCount
 | 
						|
      }).catch(() => { this.loading = false })
 | 
						|
    },
 | 
						|
    findItemIndex(key) {
 | 
						|
      return this.setting_form.findIndex(value => value.prop && value.prop === key
 | 
						|
      )
 | 
						|
    },
 | 
						|
    async getInfo() {
 | 
						|
      await this.getDicData()
 | 
						|
      if (this.readingType.length > 0) {
 | 
						|
        const index = this.findItemIndex('ModalityId')
 | 
						|
        this.$set(this.setting_form[index], 'options', this.readingType)
 | 
						|
      }
 | 
						|
    },
 | 
						|
    getDicData() {
 | 
						|
      getBasicDataSelects(['ReadingType']).then(res => {
 | 
						|
        const { ReadingType } = { ...res.Result }
 | 
						|
        this.readingType = ReadingType || {}
 | 
						|
      }).catch(() => {})
 | 
						|
    },
 | 
						|
    handleAdd() {
 | 
						|
      this.rowData = {}
 | 
						|
      this.setting_model.title = 'Add'
 | 
						|
      this.setting_model.visible = true
 | 
						|
    },
 | 
						|
    handleEdit(row) {
 | 
						|
      this.rowData = row
 | 
						|
      this.setting_model.title = 'Add'
 | 
						|
      this.setting_model.visible = true
 | 
						|
    },
 | 
						|
    handleDelete(row) {
 | 
						|
      this.$confirm('Sure to delete?', {
 | 
						|
        type: 'warning',
 | 
						|
        distinguishCancelAndClose: true,
 | 
						|
        confirmButtonText: 'Ok',
 | 
						|
        cancelButtonText: 'Cancel'
 | 
						|
      })
 | 
						|
        .then(() => {
 | 
						|
          deleteQATemplateItem(row.Id)
 | 
						|
            .then(res => {
 | 
						|
              if (res.IsSuccess) {
 | 
						|
                this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
 | 
						|
                this.$message.success('Deleted successfully!')
 | 
						|
              }
 | 
						|
            })
 | 
						|
        })
 | 
						|
    },
 | 
						|
    sortByColumn(column) {
 | 
						|
      if (column.order === 'ascending') {
 | 
						|
        this.searchData.Asc = true
 | 
						|
      } else {
 | 
						|
        this.searchData.Asc = false
 | 
						|
      }
 | 
						|
      this.searchData.SortField = column.prop
 | 
						|
      this.searchData.PageIndex = 1
 | 
						|
      this.getList()
 | 
						|
    },
 | 
						|
    handleReset() {
 | 
						|
      this.searchData = searchDataDefault()
 | 
						|
      this.getList()
 | 
						|
    },
 | 
						|
    closeModel() {
 | 
						|
      this.setting_model.visible = false
 | 
						|
      this.getList()
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
</script>
 | 
						|
<style lang="scss">
 | 
						|
.template-setting{
 | 
						|
  height: 100%;
 | 
						|
  .el-header{
 | 
						|
    .filter-container{
 | 
						|
      margin-top: 10px;
 | 
						|
      display: flex;
 | 
						|
      align-items: center;
 | 
						|
      span{
 | 
						|
        font-size:13px;
 | 
						|
        margin-right:5px;
 | 
						|
      }
 | 
						|
      .mr{
 | 
						|
        margin-right: 5px;
 | 
						|
        width: 120px;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  .el-main{
 | 
						|
    height:calc(100% - 40px);
 | 
						|
    padding: 0 20px;
 | 
						|
    .data-table{
 | 
						|
      height: 100%;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  .el-footer{
 | 
						|
    padding: 0 20px;
 | 
						|
  }
 | 
						|
  .el-dialog__header{
 | 
						|
    padding:10px;
 | 
						|
  }
 | 
						|
  .el-dialog__body{
 | 
						|
    padding:10px;
 | 
						|
  }
 | 
						|
}
 | 
						|
</style>
 |