attribute.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. import Custom from '@/pages/FormVolume/js/custom'
  2. import { dataTopic, dataResult } from '../js/config'
  3. export default {
  4. data() {
  5. return {
  6. attrShow: {
  7. panel: true,
  8. list: true,
  9. attr: true,
  10. compt: false
  11. }
  12. }
  13. },
  14. computed: {
  15. isPutContent () {
  16. if (!this.dataItem) {
  17. return false
  18. }
  19. return ['input', 'textarea'].indexOf(this.dataItem.type) === -1
  20. }
  21. },
  22. methods: {
  23. async addAttrData () {
  24. try {
  25. let msg1 = '请确认当前问卷已保存,是否新增问卷?'
  26. let msg2 = '是否新增问卷?'
  27. let msg = this.data ? msg1 : msg2
  28. await this.$dialog.confirm({
  29. title: '提示',
  30. message: msg,
  31. })
  32. this.selectData(dataTopic())
  33. } catch (err) {
  34. }
  35. },
  36. async selectData(data) {
  37. try {
  38. this.$set(this, 'data', data)
  39. let obj = data.result[0]
  40. obj && this.selectItem(obj, true)
  41. } catch (err) {
  42. console.warn(err)
  43. }
  44. },
  45. addItem () {
  46. try {
  47. let result = this.data.result
  48. let index = result.length
  49. this.dataItem && result.some((item, i) => {
  50. if (item === this.dataItem) {
  51. index = i + 1
  52. return true
  53. }
  54. })
  55. let data = dataResult()
  56. result.splice(index, 0, data)
  57. this.dataItem = data
  58. } catch (err) {
  59. }
  60. },
  61. async removeItem () {
  62. try {
  63. await this.$dialog.confirm({
  64. title: '提示',
  65. message: '确认删除吗?',
  66. })
  67. let result = this.data.result
  68. let index = null
  69. this.dataItem && result.some((item, i) => {
  70. if (item === this.dataItem) {
  71. index = i
  72. return true
  73. }
  74. })
  75. if (typeof index === 'number') {
  76. result.splice(index, 1)
  77. this.dataItem = null
  78. }
  79. } catch (err) {
  80. }
  81. },
  82. async selectItem(item, b) {
  83. try {
  84. if (!b) {
  85. this.onTipComptState()
  86. }
  87. this.dataItem = item
  88. this.attrShow.compt = true
  89. } catch (err) {
  90. }
  91. },
  92. onChangeCompType (type) {
  93. let { val } = this.dataItem
  94. if (['checkbox'].indexOf(type) !== -1) {
  95. this.dataItem.val = []
  96. } else {
  97. this.dataItem.val = ''
  98. }
  99. this.dataItem.type = type
  100. Custom(this.dataItem)
  101. },
  102. moveItemIndex (n) {
  103. let i = null
  104. let result = this.data.result
  105. result.some((item, index) => {
  106. if (item && item === this.dataItem) {
  107. i = index
  108. return true
  109. }
  110. })
  111. if (typeof i !== 'number') {
  112. return
  113. }
  114. let targetIndex = i + (n < 0 ? n : n + 1)
  115. if (targetIndex < 0) {
  116. this.$toast.fail('已经第一个了')
  117. return
  118. }
  119. if (targetIndex > result.length) {
  120. this.$toast.fail('已经是最后一个了')
  121. return
  122. }
  123. let temp = result[i]
  124. result[i] = null
  125. result.splice(targetIndex, 0, temp)
  126. this.data.result = this.data.result.filter(item => item)
  127. },
  128. onKeyup (ev) {
  129. let { keyCode, target } = ev
  130. if (/(input|textarea)/i.test(target.nodeName) && target.value) {
  131. return
  132. }
  133. if (keyCode === 38) {
  134. this.moveItemIndex(-1)
  135. }
  136. if (keyCode === 40) {
  137. this.moveItemIndex(1)
  138. }
  139. },
  140. async onTipComptState () {
  141. let pm
  142. try {
  143. let { mgTipComptDirectionState } = this.$store.state.manager
  144. if (mgTipComptDirectionState || !this.data) {
  145. pm = Promise.resolve()
  146. }
  147. if (!pm) {
  148. await this.$dialog.confirm({
  149. title: '提示',
  150. message: '按 ↑ ↓ 可调整位置!',
  151. confirmButtonText: '不再提示',
  152. })
  153. this.$store.commit('setMgTipComptDirectionState', 1)
  154. pm = Promise.resolve()
  155. }
  156. } catch (err) {
  157. pm = Promise.reject()
  158. }
  159. return pm
  160. },
  161. async onTipAttrState() {
  162. let pm
  163. try {
  164. let { mgTipAttrSaveState } = this.$store.state.manager
  165. if (mgTipAttrSaveState || !this.data) {
  166. pm = Promise.resolve()
  167. }
  168. if (!pm) {
  169. await this.$dialog.confirm({
  170. title: '提示',
  171. message: '切换问卷,请确认修改已保存?',
  172. confirmButtonText: '不再提示',
  173. })
  174. this.$store.commit('setMgTipAttrSaveState', 1)
  175. pm = Promise.resolve()
  176. }
  177. } catch (err) {
  178. pm = Promise.reject()
  179. }
  180. return pm
  181. },
  182. onChangeContent (ev) {
  183. try {
  184. let val = typeof ev === 'string' ? ev : ev.target.value
  185. console.log(val)
  186. let arr = val.split(/\n/g).map(it => {
  187. let r = it.split(/\s*\|\s*/)
  188. return {
  189. title: r[0] || '',
  190. memo: r[1] || ''
  191. }
  192. })
  193. console.log(arr)
  194. this.dataItem.content = arr
  195. } catch (err) {
  196. }
  197. }
  198. },
  199. created() {
  200. document.documentElement.addEventListener('keyup', this.onKeyup)
  201. },
  202. destoryed () {
  203. document.documentElement.removeEventListener('keyup', this.onKeyup)
  204. }
  205. }