push-code.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. <template>
  2. <div>
  3. <div class="flex items-center justify-center">
  4. <el-radio-group v-model="formCode.type">
  5. <el-radio :value="1" size="large">独立编号</el-radio>
  6. <el-radio :value="2" size="large">组合编号</el-radio>
  7. </el-radio-group>
  8. </div>
  9. <div v-if="formCode.type === 1" class="mt-2 bg-[#EFF5FF] py-[20px]">
  10. <!-- 添加一个外层容器使内容居中 -->
  11. <div class="mx-auto max-w-5xl flex flex-col items-center">
  12. <!-- 表单部分 -->
  13. <el-form
  14. ref="formCodeRef"
  15. :model="formCode"
  16. :inline="true"
  17. class="flex flex-wrap items-center justify-center gap-x-2 gap-y-2"
  18. :rules="formCodeRules"
  19. >
  20. <div class="w-[160px]">
  21. <el-form-item label=" " prop="startNumber1">
  22. <el-input v-model="formCode.startNumber1" placeholder="数值(起)" clearable style="width: 120px;" />
  23. </el-form-item>
  24. </div>
  25. <div class="w-[160px]">
  26. <el-form-item label=" " prop="endNumber1">
  27. <el-input v-model="formCode.endNumber1" placeholder="数值(止)" clearable style="width: 120px;" />
  28. </el-form-item>
  29. </div>
  30. <div>
  31. <el-form-item label=" " prop="increType1">
  32. <el-select
  33. v-model="formCode.increType1"
  34. placeholder="递增分类"
  35. clearable
  36. style="width: 120px;"
  37. >
  38. <el-option label="常规递增" :value="1" />
  39. <el-option label="奇数递增" :value="2" />
  40. <el-option label="偶数递增" :value="3" />
  41. </el-select>
  42. </el-form-item>
  43. </div>
  44. <div>
  45. <el-form-item label=" " prop="cycleType1">
  46. <el-select
  47. v-model="formCode.cycleType1"
  48. placeholder="循环分类"
  49. clearable
  50. style="width: 120px;"
  51. >
  52. <el-option label="固定循环" :value="1" />
  53. <el-option label="递增循环" :value="2" />
  54. </el-select>
  55. </el-form-item>
  56. </div>
  57. <div>
  58. <el-form-item label=" " prop="cycleTypeGroup1">
  59. <el-input v-model="formCode.cycleTypeGroup1" placeholder="循环组数" clearable style="width: 120px;" />
  60. </el-form-item>
  61. </div>
  62. </el-form>
  63. <!-- 提示文本部分 - 现在也会居中 -->
  64. <div class="w-full text-left text-orange-500 line-height-10">
  65. <p>提示:起和止分别代表编号数据的开始编号和结束编号</p>
  66. <p>固定循环:起止以内的编号每个数据循环n次,如1-3:1、1、1..n个1/2、2、2..n个2/3、3、3..n个3</p>
  67. <p>递增循环:起止以内的编号递增n次,如1-3:1、2、3/1、2、3/....n次循环1、2、3</p>
  68. </div>
  69. </div>
  70. </div>
  71. <div v-if="formCode.type === 2" class="mt-2 flex justify-center bg-[#EFF5FF] py-[20px]">
  72. <div class="max-w-5xl w-full">
  73. <el-form ref="formCodeRef1" :model="formCode" :inline="true" :rules="formCodeRules">
  74. <!-- First Row -->
  75. <div class="flex flex-wrap items-center gap-1">
  76. <div class="w-[160px]">
  77. <el-form-item label=" " prop="startNumber1">
  78. <el-input v-model="formCode.startNumber1" placeholder="数值1(起)" clearable />
  79. </el-form-item>
  80. </div>
  81. <div class="w-[160px]">
  82. <el-form-item label=" " prop="endNumber1">
  83. <el-input v-model="formCode.endNumber1" placeholder="数值1(止)" clearable />
  84. </el-form-item>
  85. </div>
  86. <div>
  87. <el-form-item label=" " prop="increType1">
  88. <el-select
  89. v-model="formCode.increType1"
  90. placeholder="递增分类"
  91. clearable
  92. style="width: 120px"
  93. >
  94. <el-option label="常规递增" :value="1" />
  95. <el-option label="奇数递增" :value="2" />
  96. <el-option label="偶数递增" :value="3" />
  97. </el-select>
  98. </el-form-item>
  99. </div>
  100. <div>
  101. <el-form-item label=" " prop="cycleType1">
  102. <el-select
  103. v-model="formCode.cycleType1"
  104. placeholder="循环分类"
  105. clearable
  106. style="width: 120px"
  107. >
  108. <el-option label="固定循环" :value="1" />
  109. <el-option label="递增循环" :value="2" />
  110. </el-select>
  111. </el-form-item>
  112. </div>
  113. <div class="w-[150px]">
  114. <el-form-item label=" " prop="cycleTypeGroup1">
  115. <el-input v-model="formCode.cycleTypeGroup1" placeholder="循环组数" clearable />
  116. </el-form-item>
  117. </div>
  118. </div>
  119. <!-- Second Row (Info and Separator) -->
  120. <div class="mt-4 flex flex-wrap items-start gap-4">
  121. <div>
  122. <el-form-item label=" " prop="separator">
  123. <el-select
  124. v-model="formCode.separator"
  125. placeholder="选择符号"
  126. clearable
  127. style="width: 120px"
  128. >
  129. <el-option v-for="(item, index) in separatorOptions" :key="index" :label="item.label" :value="item.label" />
  130. </el-select>
  131. </el-form-item>
  132. </div>
  133. <div class="min-w-[300px] flex-1 text-orange-500">
  134. <p class="mb-1">固定循环:起止以内的编号每个数据循环n次,如1-3:1、1、1...n个1/2、2、2..n个2/3、3、3...n个3</p>
  135. <p>递增循环:起止以内的编号递增n次,如1-3:1、2、3/1、2、3/...n次循环1、2、3</p>
  136. </div>
  137. </div>
  138. <!-- Third Row -->
  139. <div class="mt-4 flex flex-wrap items-center gap-1">
  140. <div class="w-[160px]">
  141. <el-form-item label=" " prop="startNumber2">
  142. <el-input v-model="formCode.startNumber2" placeholder="数值2(起)" clearable />
  143. </el-form-item>
  144. </div>
  145. <div class="w-[160px]">
  146. <el-form-item label=" " prop="endNumber2">
  147. <el-input v-model="formCode.endNumber2" placeholder="数值2(止)" clearable />
  148. </el-form-item>
  149. </div>
  150. <div>
  151. <el-form-item label=" " prop="increType2">
  152. <el-select
  153. v-model="formCode.increType2"
  154. placeholder="递增分类"
  155. clearable
  156. style="width: 120px"
  157. >
  158. <el-option label="常规递增" value="1" />
  159. <el-option label="奇数递增" value="2" />
  160. <el-option label="偶数递增" value="3" />
  161. </el-select>
  162. </el-form-item>
  163. </div>
  164. <div>
  165. <el-form-item label=" " prop="cycleType2">
  166. <el-select
  167. v-model="formCode.cycleType2"
  168. placeholder="循环分类"
  169. clearable
  170. style="width: 120px"
  171. >
  172. <el-option label="固定循环" value="1" />
  173. <el-option label="递增循环" value="2" />
  174. </el-select>
  175. </el-form-item>
  176. </div>
  177. <div class="w-[150px]">
  178. <el-form-item label=" " prop="cycleTypeGroup2">
  179. <el-input v-model="formCode.cycleTypeGroup2" placeholder="循环组数" clearable />
  180. </el-form-item>
  181. </div>
  182. </div>
  183. </el-form>
  184. <div class="mt-2 text-orange-500 line-height-10">
  185. <p>提示:数值1和数值2分别代表组合编号的前后数据;起和止分别代表前后数据的开始编号和结束编号</p>
  186. </div>
  187. </div>
  188. </div>
  189. </div>
  190. </template>
  191. <script setup>
  192. import { onMounted, ref, watch } from 'vue'
  193. import wbsApi from '~api/data-fill/wbs'
  194. import { getDictionaryData } from '~uti/tools'
  195. import { formValidate } from 'js-fast-way'
  196. const props = defineProps({
  197. projectId: [String, Number],
  198. contractId: [String, Number],
  199. tableId: [String, Number],
  200. treeId: [String, Number],
  201. classify:[String, Number],
  202. keyVal:[String, Number],
  203. })
  204. //事件
  205. //参数变量
  206. const projectId = ref(props.projectId)
  207. const contractId = ref(props.contractId)
  208. const table_id = ref(props.tableId)
  209. const tree_id = ref(props.treeId)
  210. const classify = ref(props.classify)
  211. const key = ref(props.keyVal)
  212. //监听
  213. watch(() => [
  214. props.projectId,
  215. props.contractId,
  216. props.tableId,
  217. props.treeId,
  218. props.classify,
  219. props.keyVal,
  220. ], ([pid, cid, tableId, treeId, cfy, Key]) => {
  221. projectId.value = pid
  222. contractId.value = cid
  223. table_id.value = tableId
  224. tree_id.value = treeId
  225. classify.value = cfy
  226. key.value = Key
  227. })
  228. const formCode = ref({
  229. type:1,
  230. })
  231. const formCodeRules = {
  232. startNumber1: [
  233. {
  234. required: true,
  235. trigger: 'blur',
  236. message: '请输入数值(起)',
  237. },
  238. {
  239. pattern: /^[1-9]\d*$/,
  240. trigger: 'blur',
  241. message: '只能输入正整数',
  242. },
  243. ],
  244. endNumber1: [
  245. {
  246. required: true,
  247. trigger: 'blur',
  248. message: '请输入数值(止)',
  249. },
  250. {
  251. pattern: /^[1-9]\d*$/,
  252. trigger: 'blur',
  253. message: '只能输入正整数',
  254. },
  255. ],
  256. increType1: {
  257. required: true,
  258. trigger: 'change',
  259. message: '请选择递增分类',
  260. },
  261. cycleType1: {
  262. required: true,
  263. trigger: 'change',
  264. message: '请选择循环分类',
  265. },
  266. cycleTypeGroup1: [
  267. {
  268. required: true,
  269. trigger: 'blur',
  270. message: '请输入循环组数',
  271. },
  272. {
  273. pattern: /^[1-9]\d*$/,
  274. trigger: 'blur',
  275. message: '只能输入正整数',
  276. },
  277. ],
  278. startNumber2: [
  279. {
  280. required: true,
  281. trigger: 'blur',
  282. message: '请输入数值(起)',
  283. },
  284. {
  285. pattern: /^[1-9]\d*$/,
  286. trigger: 'blur',
  287. message: '只能输入正整数',
  288. },
  289. ],
  290. endNumber2: [
  291. {
  292. required: true,
  293. trigger: 'blur',
  294. message: '请输入数值(止)',
  295. },
  296. {
  297. pattern: /^[1-9]\d*$/,
  298. trigger: 'blur',
  299. message: '只能输入正整数',
  300. },
  301. ],
  302. increType2: {
  303. required: true,
  304. trigger: 'change',
  305. message: '请选择递增分类',
  306. },
  307. cycleType2: {
  308. required: true,
  309. trigger: 'change',
  310. message: '请选择循环分类',
  311. },
  312. cycleTypeGroup2: [
  313. {
  314. required: true,
  315. trigger: 'blur',
  316. message: '请输入循环组数',
  317. },
  318. {
  319. pattern: /^[1-9]\d*$/,
  320. trigger: 'blur',
  321. message: '只能输入正整数',
  322. },
  323. ],
  324. separator: {
  325. required: true,
  326. trigger: 'change',
  327. message: '请选择选择符号',
  328. },
  329. }
  330. const formCodeRef = ref(null)
  331. const formCodeRef1 = ref(null)
  332. const separatorOptions = ref([])
  333. const getSeparatorOptions = async () => {
  334. separatorOptions.value = await getDictionaryData('separator', true )
  335. }
  336. //渲染完成
  337. onMounted(() => {
  338. getSeparatorOptions()
  339. })
  340. const saveBatchCode = async ()=>{
  341. const validate = formCode.value.type === 1
  342. ? await formValidate(formCodeRef.value, formCodeRules)
  343. : await formValidate(formCodeRef1.value, formCodeRules)
  344. if (!validate) {
  345. return false
  346. }
  347. const { error, code, data, msg } = await wbsApi.batchAddNumbers({
  348. ...formCode.value,
  349. classify: classify.value,
  350. nodeId: tree_id.value,
  351. pkeyId: table_id.value,
  352. key:key.value,
  353. })
  354. if (!error && code === 200) {
  355. window?.$message?.success('操作成功')
  356. return true
  357. }
  358. }
  359. // 暴露出去
  360. defineExpose({
  361. saveBatchCode,
  362. })
  363. </script>