detail.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <template>
  2. <CusDialog
  3. :show="show"
  4. :title="titleCpt"
  5. @onClose="$emit('update:show', false)"
  6. width="1000px"
  7. height="auto"
  8. @onSubmit="onSubmit"
  9. :loading="state.loading"
  10. >
  11. <div class="__cus-dialog-form">
  12. <CusForm ref="ref_form" label-width="120">
  13. <CusFormColumn
  14. :span="12"
  15. required
  16. label="索引中文"
  17. v-model:param="state.form.indexName"
  18. />
  19. <CusFormColumn
  20. :span="12"
  21. required
  22. label="索引表名"
  23. v-model:param="state.form.indexTableName"
  24. />
  25. <CusFormColumn
  26. :span="12"
  27. required
  28. label="数据共享来源"
  29. v-model:param="state.form.dataSource"
  30. />
  31. <CusFormColumn
  32. :span="12"
  33. required
  34. label="数据提供来源"
  35. v-model:param="state.form.dataOffer"
  36. />
  37. <CusFormColumn
  38. :span="12"
  39. required
  40. label="共享方式"
  41. v-model:param="state.form.shareMethod"
  42. link="select"
  43. :options="DictionaryStore.gxMethodList"
  44. />
  45. <CusFormColumn
  46. :span="12"
  47. required
  48. label="共享周期"
  49. v-model:param="state.form.shareCycle"
  50. link="select"
  51. :options="DictionaryStore.gxCycleList"
  52. />
  53. <CusFormColumn
  54. :span="12"
  55. required
  56. label="默认模式"
  57. v-model:param="state.form.defModel"
  58. link="radio"
  59. :options="DictionaryStore.defaultModelList"
  60. />
  61. <CusFormColumn
  62. :span="12"
  63. :required="state.form.defModel == 1"
  64. label="图片字段"
  65. v-model:param="state.form.pictureField"
  66. />
  67. <CusFormColumn
  68. :span="12"
  69. required
  70. label="主题模式"
  71. v-model:param="state.form.themeMode"
  72. link="select"
  73. :options="DictionaryStore.themeModeList"
  74. />
  75. <CusFormColumn
  76. :span="12"
  77. :required="state.form.themeMode !== 'no_support'"
  78. label="主题字段"
  79. v-model:param="state.form.themeField"
  80. />
  81. <CusFormColumn
  82. :span="12"
  83. label="图模式卡片数"
  84. v-model:param="state.form.pictureModeCardNum"
  85. link="input-number"
  86. :min="1"
  87. :max="5"
  88. />
  89. <CusFormColumn
  90. :span="12"
  91. label="卡片列数"
  92. v-model:param="state.form.cardColumnNum"
  93. link="input-number"
  94. :min="1"
  95. :max="5"
  96. />
  97. <CusFormColumn
  98. :span="12"
  99. label="列模式列数"
  100. v-model:param="state.form.columnModelNum"
  101. link="input-number"
  102. :min="1"
  103. :max="8"
  104. />
  105. <CusFormColumn
  106. v-if="state.form.shareMethod === 'lxfz'"
  107. :span="12"
  108. label="数据更新时间"
  109. v-model:param="state.form.updateTime"
  110. link="datetime"
  111. />
  112. <CusFormColumn
  113. :span="24"
  114. label="备注"
  115. v-model:param="state.form.remark"
  116. type="textarea"
  117. :rows="5"
  118. />
  119. </CusForm>
  120. </div>
  121. </CusDialog>
  122. </template>
  123. <script setup lang="ts">
  124. import {computed, getCurrentInstance, nextTick, reactive, ref, watch} from "vue";
  125. import {useDictionaryStore} from "@/stores";
  126. import {ElMessage, ElMessageBox} from "element-plus";
  127. import {sysIndexGetDetail, sysIndexSaveOrUpdate} from "@/api/modules/manage";
  128. const emit = defineEmits(['update:show', 'refresh'])
  129. const {proxy} = getCurrentInstance()
  130. const DictionaryStore = useDictionaryStore()
  131. const props = defineProps({
  132. show: {default: false},
  133. transfer: {}
  134. })
  135. const state: any = reactive({
  136. form: {},
  137. loading: false
  138. })
  139. const ref_form = ref()
  140. const titleCpt = computed(() => {
  141. let t = ''
  142. switch (props.transfer.mode) {
  143. case 'add': t = '新增索引'
  144. break
  145. case 'edit': t = '编辑索引'
  146. break
  147. }
  148. return t
  149. })
  150. const onSubmit = () => {
  151. ref_form.value.submit().then(() => {
  152. ElMessageBox.confirm("是否提交?", "提示", {
  153. confirmButtonText: "确定",
  154. cancelButtonText: "取消",
  155. type: "warning",
  156. } as any).then(() => {
  157. state.loading = true
  158. sysIndexSaveOrUpdate(state.form).then(res => {
  159. if (res.code === 200) {
  160. ElMessage.success(props.transfer.mode === 'add' ? '新增成功!' : '编辑成功!')
  161. emit('update:show', false)
  162. emit('refresh')
  163. } else {
  164. ElMessage.error(res.msg)
  165. }
  166. state.loading = false
  167. })
  168. }).catch(() => {})
  169. }).catch((e) => {
  170. ElMessage({
  171. message: e[0].message,
  172. grouping: true,
  173. type: 'warning',
  174. })
  175. })
  176. }
  177. const initDetail = () => {
  178. state.loading = true
  179. sysIndexGetDetail(props.transfer.id).then(res => {
  180. if (res.code === 200) {
  181. state.form = res.data
  182. state.loading = false
  183. } else {
  184. ElMessage.error(res.msg)
  185. }
  186. })
  187. }
  188. watch(() => props.show, (n) => {
  189. if (n) {
  190. initDictionary()
  191. if (props.transfer.mode === 'add') {
  192. state.form = {
  193. pictureModeCardNum: 3,
  194. cardColumnNum: 2,
  195. columnModelNum: 4,
  196. defModel: 'column_model',
  197. }
  198. } else {
  199. initDetail()
  200. }
  201. nextTick(() => {
  202. ref_form.value.reset()
  203. })
  204. }
  205. })
  206. const initDictionary = () => {
  207. DictionaryStore.initDict('gx_method')
  208. DictionaryStore.initDict('gx_cycle')
  209. DictionaryStore.initDict('theme_mode')
  210. DictionaryStore.initDict('default_model')
  211. }
  212. </script>
  213. <style lang="scss" scoped>
  214. </style>