completeTargetDia.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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;">完善信息</span>
  15. </div>
  16. <div class="dialog-main">
  17. <el-form
  18. ref="targetForm"
  19. label-position="left"
  20. label-width="80px"
  21. hide-required-asterisk
  22. :model="formData"
  23. :rules="formRules">
  24. <el-form-item label="指标名称" prop="edb_name">
  25. <el-input
  26. v-model="formData.edb_name"
  27. style="width: 80%"
  28. placeholder="指标名称"></el-input>
  29. </el-form-item>
  30. <el-form-item label="所属目录" prop="menu">
  31. <el-cascader
  32. v-model="formData.menu"
  33. :options="options"
  34. :props="levelProps"
  35. style="width: 80%"
  36. clearable
  37. placeholder="请选择所属目录"/>
  38. </el-form-item>
  39. <el-form-item label="频率" prop="frequency">
  40. <span slot="label">频&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;率</span>
  41. <el-select
  42. v-model="formData.frequency"
  43. placeholder="请选择频率"
  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="单位" 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">保存</el-button>
  62. <el-button type="primary" plain @click="cancelHandle">取消</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. export default {
  71. name:'',
  72. props: {
  73. isOpenDialog: {
  74. type: Boolean,
  75. },
  76. params: {
  77. type: Object,
  78. }
  79. },
  80. watch: {
  81. 'isOpenDialog': {
  82. handler(newval) {
  83. newval && this.getMenu();
  84. // console.log(this.params)
  85. if(newval) this.formData = {
  86. edb_name: this.params.edb_name || '',
  87. menu: [],
  88. frequency: this.params.frequency || '',
  89. unit: this.params.unit || ''
  90. }
  91. }
  92. }
  93. },
  94. data () {
  95. return {
  96. formData: {
  97. },
  98. formRules: {
  99. edb_name:[
  100. { required: true, message: '指标名称不能为空', trigger: 'blur' },
  101. ],
  102. menu:[
  103. { required: true, message: '所属目录不能为空', trigger: 'blur' },
  104. ],
  105. frequency:[
  106. { required: true, message: '频率不能为空', trigger: 'blur' },
  107. ],
  108. unit:[
  109. { required: true, message: '单位不能为空', trigger: ['blur','change'] },
  110. ],
  111. },
  112. options: [],
  113. unitArr,
  114. levelProps: {
  115. label: 'ClassifyName',
  116. value: 'ClassifyId',
  117. children: 'Children',
  118. checkStrictly: true
  119. },
  120. frequencyArr:['日度','周度','旬度','月度','季度','年度']
  121. };
  122. },
  123. methods: {
  124. /* 获取目录结构 */
  125. getMenu() {
  126. dataBaseInterface.menuListV3().then(res => {
  127. if(res.Ret === 200) {
  128. this.filterNodes(res.Data.AllNodes||[]);
  129. this.options = res.Data.AllNodes || [];
  130. }
  131. })
  132. },
  133. // 递归改变第三级目录结构
  134. filterNodes(arr) {
  135. arr.length && arr.forEach(item => {
  136. item.Children.length && this.filterNodes(item.Children)
  137. if(!item.Children.length) {
  138. delete item.Children
  139. }
  140. })
  141. },
  142. /* 保存 */
  143. addTarget() {
  144. this.$refs.targetForm.validate((valid) => {
  145. if(valid) {
  146. let params = {
  147. ...this.params,
  148. EdbName: this.formData.edb_name,
  149. ClassifyId: this.formData.menu[this.formData.menu.length - 1],
  150. Frequency: this.formData.frequency,
  151. Unit: this.formData.unit
  152. }
  153. dataBaseInterface.targetAdd(params).then(res => {
  154. if(res.Ret === 200) {
  155. this.$message.success('新增指标成功!')
  156. this.formData = {}
  157. this.$emit('addTargetCallback',{ code:res.Data.UniqueCode,id:res.Data.EdbInfoId,classifyId:params.ClassifyId })
  158. }
  159. })
  160. }
  161. })
  162. },
  163. cancelHandle() {
  164. this.formData = {}
  165. this.$emit('cancel')
  166. }
  167. },
  168. created() {},
  169. mounted() {},
  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>