addIndicsDia.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <template>
  2. <!-- 单个指标添加进指标库 -->
  3. <el-dialog
  4. :visible.sync="isOpenDialog"
  5. :close-on-click-modal="false"
  6. :modal-append-to-body="false"
  7. top="5vh"
  8. :title="$t('ManualEdbListPage.add_tobase_btn')"
  9. @close="$emit('close')"
  10. custom-class="add-indics-dia"
  11. center
  12. width="798px"
  13. v-dialogDrag
  14. >
  15. <div class="dialog-container">
  16. <el-form
  17. ref="targetForm"
  18. label-position="right"
  19. label-width="120px"
  20. hide-required-asterisk
  21. :model="formData"
  22. :rules="formRules"
  23. >
  24. <el-form-item :label="$t('Table.edb_name')" prop="edb_name">
  25. <el-input
  26. v-model="formData.edb_name"
  27. style="width: 80%"
  28. :placeholder="$t('Table.edb_name')"></el-input>
  29. </el-form-item>
  30. <el-form-item :label="$t('Edb.Detail.select_catalogue')" prop="menu">
  31. <cascader
  32. v-model="formData.menu"
  33. :options="options"
  34. cascaderWidth="width: 80%"
  35. clearable
  36. :placeholder="$t('CustomAnalysisPage.select_appropriate_category')"
  37. :config="{ emitPath: false, checkStrictly: true }"
  38. />
  39. </el-form-item>
  40. <el-form-item :label="$t('Table.frequency')" prop="frequency">
  41. <el-select
  42. v-model="formData.frequency"
  43. :placeholder="$t('CustomAnalysisPage.select_frequency')"
  44. style="width:80%"
  45. clearable>
  46. <el-option
  47. v-for="item in frequencyArr"
  48. :key="item.value"
  49. :label="item.label"
  50. :value="item.value">
  51. </el-option>
  52. </el-select>
  53. </el-form-item>
  54. <el-form-item :label="$t('Table.unit')">
  55. <selectUnit
  56. v-model="formData.unit"
  57. style="width: 80%"
  58. />
  59. </el-form-item>
  60. </el-form>
  61. </div>
  62. <div class="footer-container" slot="footer">
  63. <el-button type="primary" @click="handleAddEdb" :loading="btnloading">{{ $t('Dialog.confirm_save_btn') }}</el-button>
  64. <el-button type="primary" plain @click="$emit('close')">{{ $t('Dialog.cancel_btn') }}</el-button>
  65. </div>
  66. </el-dialog>
  67. </template>
  68. <script>
  69. import { dataBaseInterface } from '@/api/api.js';
  70. import { steelInterface } from "@/api/modules/thirdBaseApi";
  71. import selectUnit from '@/components/selectUnit.vue';
  72. import { frequencySelectList } from '@/utils/defaultOptions';
  73. export default {
  74. components: { selectUnit },
  75. props:{
  76. isOpenDialog:{
  77. type:Boolean,
  78. default:false
  79. },
  80. edbData:{
  81. type:Object,
  82. defalut:{}
  83. }
  84. },
  85. computed:{
  86. formRules(){
  87. return {
  88. edb_name:[
  89. { required: true, message: /* '指标名称不能为空' */this.$t('Edb.Valids.name_msg'), trigger: 'blur' },
  90. ],
  91. menu:[
  92. { required: true, message: /* '所属目录不能为空' */this.$t('Edb.Valids.menu_msg'), trigger: 'blur' },
  93. ],
  94. frequency:[
  95. { required: true, message: /* '频率不能为空' */this.$t('Edb.Valids.fre_msg'), trigger: 'blur' },
  96. ],
  97. unit:[
  98. { required: true, message: /* '单位不能为空' */this.$t('Edb.Valids.unit_msg'), trigger: 'blur' },
  99. ],
  100. }
  101. }
  102. },
  103. watch:{
  104. isOpenDialog(newval){
  105. if(newval){
  106. this.initDia()
  107. }
  108. }
  109. },
  110. data() {
  111. return {
  112. formData:{
  113. code:'',
  114. edb_name:'',
  115. menu:'',
  116. frequency:'',
  117. unit:'',
  118. },
  119. options:[],
  120. levelProps: {
  121. label: 'ClassifyName',
  122. value: 'ClassifyId',
  123. children: 'Children',
  124. emitPath: false,
  125. checkStrictly: true
  126. },
  127. frequencyArr:frequencySelectList(),
  128. btnloading:false,
  129. };
  130. },
  131. methods: {
  132. filterNodes(arr) {
  133. arr.length &&
  134. arr.forEach((item) => {
  135. item.Children.length && this.filterNodes(item.Children);
  136. if (!item.Children.length) {
  137. delete item.Children;
  138. }
  139. });
  140. },
  141. // 获取指标分类列表
  142. async getClassifyOpt(){
  143. const res=await dataBaseInterface.menuListV3()
  144. if (res.Ret !== 200) return
  145. this.filterNodes(res.Data.AllNodes||[]);
  146. this.options = res.Data.AllNodes || [];
  147. },
  148. async handleAddEdb(){
  149. //校验表单
  150. try{
  151. await this.$refs.targetForm.validate()
  152. }catch(e){
  153. return
  154. }
  155. const {code,edb_name,menu,frequency,unit} = this.formData
  156. this.btnloading = true
  157. //添加检测
  158. const resAddCheck = await steelInterface.batchAddEdbCheck({
  159. IndexCodes:[code]
  160. })
  161. if(resAddCheck.Ret!==200) return (this.btnloading=false)
  162. //已存在提示并关闭该弹窗
  163. if(resAddCheck.Data[0]&&resAddCheck.Data[0].EdbExist){
  164. this.$emit('close')
  165. return this.$message.warning(this.$t('YsDataPage.haved_all_msg'))
  166. }
  167. //重名校验
  168. const resCheck = await steelInterface.batchCheckEdbName([{
  169. EdbCode:code,
  170. EdbName:edb_name,
  171. Frequency:frequency,
  172. }])
  173. if(resCheck.Ret!==200) return (this.btnloading=false)
  174. if(resCheck.Data[0]&&resCheck.Data[0].Exist){
  175. return this.$message.warning(this.$t('BloombergPage.add_edb_check_hint2'))&&(this.btnloading=false)
  176. }
  177. //添加至指标库
  178. const res = await steelInterface.AddToLib({
  179. EdbCode:code,
  180. EdbName:edb_name,
  181. Unit:unit,
  182. Frequency:frequency,
  183. ClassifyId:Number(menu),
  184. })
  185. if(res.Ret!==200) return (this.btnloading=false)
  186. this.$message.success(this.$t('MsgPrompt.add_msg2'))
  187. this.$emit('addCallback')
  188. },
  189. initDia(){
  190. this.btnloading=false
  191. this.getClassifyOpt()
  192. const {IndexName,UnitName,FrequencyName,IndexCode} = this.edbData
  193. this.formData = {
  194. code:IndexCode,
  195. edb_name:IndexName,
  196. menu:'',
  197. frequency:FrequencyName,
  198. unit:UnitName
  199. }
  200. }
  201. },
  202. };
  203. </script>
  204. <style lang="scss">
  205. .add-indics-dia{
  206. .el-cascader .el-input {
  207. width: 100%;
  208. }
  209. }
  210. </style>