openDialog.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <template>
  2. <div class="Dialog-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="560px"
  11. v-dialogDrag>
  12. <div slot="title" style="display:flex;alignItems:center;">
  13. <img :src="title=='添加'?$icons.add:title=='编辑'?$icons.edit:''" style="color:#fff;width:16px;height:16px;marginRight:5px;">
  14. <span style="fontSize:16px;">{{title}}</span>
  15. </div>
  16. <div class="dialog-main">
  17. <el-form
  18. ref="diaForm"
  19. label-position="left"
  20. hide-required-asterisk
  21. label-width="80px"
  22. :model="formData"
  23. :rules="formRules">
  24. <template v-if="!formData.isEDB">
  25. <el-form-item label="上级目录" v-if="formData.level>0">
  26. <el-tooltip class="item" effect="dark" :content="getParentName" placement="top">
  27. <span class="parentStr">{{getParentName}}</span>
  28. </el-tooltip>
  29. </el-form-item>
  30. <el-form-item label="目录名称" prop="levelVal">
  31. <el-input
  32. v-model="formData.levelVal"
  33. style="width: 80%"
  34. placeholder="必填项"></el-input>
  35. </el-form-item>
  36. </template>
  37. <!-- 编辑具体指标 -->
  38. <template v-if="title=='编辑' && formData.isEDB">
  39. <el-form-item label="指标名称" prop="levelVal">
  40. <el-input
  41. v-model="formData.levelVal"
  42. style="width: 80%"
  43. placeholder="指标名称"></el-input>
  44. </el-form-item>
  45. <el-form-item label="所属目录" prop="level_menu">
  46. <el-cascader
  47. v-model="formData.level_menu"
  48. :options="options"
  49. :props="levelProps"
  50. style="width: 80%"
  51. placeholder="请选择所属目录"/>
  52. </el-form-item>
  53. <el-form-item label="频率" prop="frequency">
  54. <span slot="label">频&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;率</span>
  55. <el-select
  56. v-model="formData.frequency"
  57. placeholder="请选择频率"
  58. style="width:80%"
  59. :disabled="$parent.tableData[0].Source===58"
  60. @change="changeTrade">
  61. <el-option
  62. v-for="item in frequencyArr"
  63. :key="item"
  64. :label="item"
  65. :value="item">
  66. </el-option>
  67. </el-select>
  68. </el-form-item>
  69. <el-form-item label="单位" prop="unit">
  70. <span slot="label">单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位</span>
  71. <selectUnit v-model="formData.unit" style="width: 80%" />
  72. </el-form-item>
  73. </template>
  74. </el-form>
  75. </div>
  76. <div class="dia-bot">
  77. <el-button type="primary" style="margin-right:20px" @click="saveHandle">保存</el-button>
  78. <el-button type="primary" plain @click="cancelHandle">取消</el-button>
  79. </div>
  80. </el-dialog>
  81. </div>
  82. </template>
  83. <script>
  84. import { dataBaseInterface } from '@/api/api.js';
  85. import { unitArr } from '@/utils/defaultOptions';
  86. export default {
  87. props: {
  88. isOpenDialog: {
  89. type: Boolean,
  90. },
  91. //标题
  92. title: {
  93. type: String,
  94. default: '添加'
  95. },
  96. formData: {
  97. type: Object,//{parentArr父级数据,isEDB:true 是否为指标}
  98. }
  99. },
  100. watch: {
  101. 'isOpenDialog': {
  102. handler(newval) {
  103. if(newval && this.formData.isEDB) {
  104. this.getMenu();
  105. }
  106. // console.log(this.formData);
  107. }
  108. }
  109. },
  110. computed:{
  111. getParentName(){
  112. const arr=this.formData.parentArr||[]
  113. let strArr=arr.reverse().map(item=>{
  114. return item.classifyName
  115. })
  116. return strArr.join('/')
  117. }
  118. },
  119. data () {
  120. return {
  121. formRules: {
  122. levelVal:[
  123. { required: true, message: '目录名称不能为空', trigger: 'blur' },
  124. ],
  125. // level_2:[
  126. // { required: true, message: '目录名称不能为空', trigger: 'blur' },
  127. // ],
  128. // level_3:[
  129. // { required: true, message: '目录名称不能为空', trigger: 'blur' },
  130. // ],
  131. // level_4:[
  132. // { required: true, message: '指标名称不能为空', trigger: 'blur' },
  133. // ],
  134. level_menu:[
  135. { required: true, message: '所属目录不能为空', trigger: 'blur' },
  136. ],
  137. frequency:[
  138. { required: true, message: '频率不能为空', trigger: 'blur' },
  139. ],
  140. unit:[
  141. { required: true, message: '单位不能为空', trigger: ['blur','change'] },
  142. ],
  143. },
  144. options: [],
  145. unitArr,
  146. levelProps: {
  147. label: 'ClassifyName',
  148. value: 'ClassifyId',
  149. children: 'Children',
  150. checkStrictly: true
  151. },
  152. frequencyArr:['日度','周度','旬度','月度','季度','年度'],
  153. };
  154. },
  155. methods: {
  156. async saveHandle() {
  157. await this.$refs.diaForm.validate();
  158. let res = null;
  159. if(this.title==='添加') {
  160. res = await dataBaseInterface.nodeAdd({
  161. ClassifyName: this.formData.levelVal||'',
  162. ParentId:this.formData.parent_id || 0,
  163. Level: this.formData.level
  164. })
  165. }else if(this.title==='编辑') {
  166. res = this.formData.isEDB
  167. ? await dataBaseInterface.targetEdit({
  168. ClassifyId: this.formData.level_menu[this.formData.level_menu.length - 1],
  169. EdbInfoId: this.formData.edbinfo_id,
  170. EdbName: this.formData.levelVal,
  171. Frequency: this.formData.frequency,
  172. Unit: this.formData.unit
  173. })
  174. : await dataBaseInterface.nodeEdit({
  175. ClassifyName: this.formData.levelVal||'',
  176. ClassifyId:this.formData.classify_id || 0
  177. })
  178. }
  179. if(res.Ret !== 200) return
  180. this.$message.success(res.Msg);
  181. if(this.title==='添加') this.callbackHandle('add');
  182. else if(this.title==='编辑' && this.formData.isEDB) this.callbackHandle('update');
  183. else if(this.title==='编辑' && !this.formData.isEDB) this.callbackHandle();
  184. },
  185. /* 成功回调 */
  186. callbackHandle(type) {
  187. this.$refs.diaForm.resetFields();
  188. this.$emit('sucessCallback',type)
  189. },
  190. /* 取消 */
  191. cancelHandle() {
  192. this.$refs.diaForm.resetFields();
  193. this.$emit('closeDia')
  194. },
  195. /* 获取目录结构 */
  196. getMenu() {
  197. dataBaseInterface.menuListV3().then(res => {
  198. if(res.Ret === 200) {
  199. this.filterNodes(res.Data.AllNodes||[]);
  200. this.options = res.Data.AllNodes || [];
  201. }
  202. })
  203. },
  204. // 递归改变第三级目录结构
  205. filterNodes(arr) {
  206. arr.length && arr.forEach(item => {
  207. item.Children.length && this.filterNodes(item.Children)
  208. if(!item.Children.length) {
  209. delete item.Children
  210. }
  211. })
  212. }
  213. },
  214. created() {},
  215. mounted() {},
  216. }
  217. </script>
  218. <style lang='scss'>
  219. .Dialog-box {
  220. .parentStr{
  221. display: block;
  222. width: 304px;
  223. overflow: hidden;
  224. white-space: nowrap;
  225. text-overflow: ellipsis;
  226. }
  227. .dialog-main {
  228. padding-left: 50px;
  229. }
  230. .el-cascader .el-input {
  231. width: 100%;
  232. }
  233. .dia-bot {
  234. margin: 52px 0 30px;
  235. display: flex;
  236. justify-content: center;
  237. }
  238. }
  239. </style>