completeTargetDia.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <div class="editTargetDiaBase-box">
  3. <el-dialog
  4. :visible.sync="isOpenDialog"
  5. :close-on-click-modal="false"
  6. :modal-append-to-body='false'
  7. @close="cancelHandle"
  8. custom-class="dialog"
  9. center
  10. width="700px"
  11. v-dialogDrag>
  12. <div slot="title" style="display:flex;alignItems:center;">
  13. <img :src="$icons.edit" style="color:#fff;width:16px;height:16px;marginRight:5px;">
  14. <span style="fontSize:16px;">{{$t('EtaBasePage.complate_info')}}</span>
  15. </div>
  16. <div class="dialog-main">
  17. <el-form
  18. ref="targetForm"
  19. label-position="left"
  20. label-width="110px"
  21. hide-required-asterisk
  22. :model="formData"
  23. :rules="formRules">
  24. <el-form-item :label="$t('Edb.Detail.e_name')" prop="edb_name">
  25. <el-input
  26. v-model="formData.edb_name"
  27. style="width: 80%"
  28. :placeholder="$t('Edb.InputHolderAll.input_name')"></el-input>
  29. </el-form-item>
  30. <el-form-item :label="$t('Edb.Detail.e_menu')" prop="menu">
  31. <el-cascader
  32. v-model="formData.menu"
  33. :options="options"
  34. :props="levelProps"
  35. style="width: 80%"
  36. clearable
  37. :placeholder="$t('Edb.InputHolderAll.input_menu')"/>
  38. </el-form-item>
  39. <el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
  40. <!-- <span slot="label">频&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;率</span> -->
  41. <el-select
  42. v-model="formData.frequency"
  43. :placeholder="$t('Edb.InputHolderAll.input_fre')"
  44. style="width:80%"
  45. clearable>
  46. <el-option
  47. v-for="item in frequencyArr"
  48. :key="item"
  49. :label="item"
  50. :value="item">
  51. </el-option>
  52. </el-select>
  53. </el-form-item>
  54. <el-form-item :label="$t('Edb.Detail.e_unit')" prop="unit">
  55. <!-- <span slot="label">单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位</span> -->
  56. <selectUnit v-model="formData.unit" style="width: 80%" />
  57. </el-form-item>
  58. </el-form>
  59. </div>
  60. <div class="dia-bot">
  61. <el-button type="primary" style="margin-right:20px" @click="addTarget"><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button>
  62. <el-button type="primary" plain @click="cancelHandle"><!-- 取消 -->{{$t('Dialog.cancel_btn')}}</el-button>
  63. </div>
  64. </el-dialog>
  65. </div>
  66. </template>
  67. <script>
  68. import { dataBaseInterface } from '@/api/api.js';
  69. import { unitArr } from '@/utils/defaultOptions';
  70. import { frequencyArr } from './util'
  71. export default {
  72. name:'',
  73. props: {
  74. isOpenDialog: {
  75. type: Boolean,
  76. },
  77. params: {
  78. type: Object,
  79. }
  80. },
  81. watch: {
  82. 'isOpenDialog': {
  83. handler(newval) {
  84. newval && this.getMenu();
  85. // console.log(this.params)
  86. if(newval) this.formData = {
  87. edb_name: this.params.edb_name || '',
  88. menu: [],
  89. frequency: this.params.frequency || '',
  90. unit: this.params.unit || ''
  91. }
  92. }
  93. }
  94. },
  95. data () {
  96. return {
  97. formData: {
  98. },
  99. formRules: {
  100. edb_name:[
  101. { required: true, message: this.$t('Edb.Valids.name_msg'), trigger: 'blur' },
  102. ],
  103. menu:[
  104. { required: true, message: this.$t('Edb.Valids.menu_msg'), trigger: 'blur' },
  105. ],
  106. frequency:[
  107. { required: true, message: this.$t('Edb.Valids.fre_msg'), trigger: 'blur' },
  108. ],
  109. unit:[
  110. { required: true, message: this.$t('Edb.Valids.unit_msg'), trigger: ['blur','change'] },
  111. ],
  112. },
  113. options: [],
  114. unitArr,
  115. levelProps: {
  116. label: 'ClassifyName',
  117. value: 'ClassifyId',
  118. children: 'Children',
  119. checkStrictly: true
  120. },
  121. frequencyArr
  122. };
  123. },
  124. methods: {
  125. /* 获取目录结构 */
  126. getMenu() {
  127. dataBaseInterface.menuListV3().then(res => {
  128. if(res.Ret === 200) {
  129. this.filterNodes(res.Data.AllNodes||[]);
  130. this.options = res.Data.AllNodes || [];
  131. }
  132. })
  133. },
  134. // 递归改变第三级目录结构
  135. filterNodes(arr) {
  136. arr.length && arr.forEach(item => {
  137. item.Children.length && this.filterNodes(item.Children)
  138. if(!item.Children.length) {
  139. delete item.Children
  140. }
  141. })
  142. },
  143. /* 保存 */
  144. addTarget() {
  145. this.$refs.targetForm.validate((valid) => {
  146. if(valid) {
  147. let params = {
  148. ...this.params,
  149. EdbName: this.formData.edb_name,
  150. ClassifyId: this.formData.menu[this.formData.menu.length - 1],
  151. Frequency: this.formData.frequency,
  152. Unit: this.formData.unit
  153. }
  154. if(this.$route.path!=='/database') return this.$emit('add',params)
  155. dataBaseInterface.targetAdd(params).then(res => {
  156. if(res.Ret === 200) {
  157. this.$message.success(/* '新增指标成功!' */this.$t('EtaBasePage.add_success_msg'))
  158. this.formData = {}
  159. this.$emit('addTargetCallback',{ code:res.Data.UniqueCode,id:res.Data.EdbInfoId,classifyId:params.ClassifyId })
  160. }
  161. })
  162. }
  163. })
  164. },
  165. cancelHandle() {
  166. this.formData = {}
  167. this.$emit('cancel')
  168. }
  169. },
  170. }
  171. </script>
  172. <style lang='scss'>
  173. .editTargetDiaBase-box {
  174. .dialog-main {
  175. padding-left: 50px;
  176. }
  177. .el-cascader .el-input {
  178. width: 100%;
  179. }
  180. .dia-bot {
  181. margin: 52px 0 30px;
  182. display: flex;
  183. justify-content: center;
  184. }
  185. }
  186. </style>