bookmark.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <template>
  2. <hc-body :loading="treeLoading" :project-nmae="projectInfo?.name" class="hc-archives-bookmark-page" split>
  3. <template #tree>
  4. <HcTree
  5. :auto-expand-keys="treeAutoExpandKeys" :contract-id="contractId" :project-id="projectId"
  6. @node-loading="treeNodeLoading" @node-tap="nodeElTreeClick"
  7. />
  8. </template>
  9. <hc-new-card title="当前目录信息编辑">
  10. <template #extra>
  11. <HcTooltip keys="archives_bookmark_btn_add">
  12. <el-button hc-btn type="primary" @click="addModalClick(false)">保存设置</el-button>
  13. </HcTooltip>
  14. </template>
  15. <template #search>
  16. <el-alert :closable="false" title="提示:设置基础信息,系统可统一内置到组卷信息里面去" type="error" />
  17. </template>
  18. <el-form :model="formInline" label-position="top" size="large">
  19. <el-row :gutter="20">
  20. <el-col :span="12">
  21. <el-form-item label="档号前缀">
  22. <el-input v-model="formInline.value.fileNumberPrefix" placeholder="请输入" />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="12">
  26. <el-form-item label="保管期限">
  27. <el-select v-model="formInline.value.storageTime" clearable placeholder="请选择" style="width:100%">
  28. <el-option v-for="item in retentionPeriod" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" />
  29. </el-select>
  30. </el-form-item>
  31. </el-col>
  32. </el-row>
  33. <el-row :gutter="20">
  34. <el-col :span="12">
  35. <el-form-item label="目录名称">
  36. <el-input v-model="formInline.value.title" placeholder="请输入" />
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="12">
  40. <el-form-item label="立卷人">
  41. <el-input v-model="formInline.value.rollor" placeholder="请输入" />
  42. </el-form-item>
  43. </el-col>
  44. </el-row>
  45. <el-row :gutter="20">
  46. <el-col :span="12">
  47. <el-form-item label="卷盒规格">
  48. <el-select v-model="formInline.value.specification" clearable placeholder="请选择" style="width:100%">
  49. <el-option v-for="item in coilsize" :key="item.value" :label="item.label" :value="item.value" />
  50. </el-select>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="12">
  54. <el-form-item label="审核人">
  55. <el-input v-model="formInline.value.reviewer" placeholder="请输入" />
  56. </el-form-item>
  57. </el-col>
  58. </el-row>
  59. <el-row :gutter="20">
  60. <el-col :span="12">
  61. <el-form-item label="案卷后缀">
  62. <el-input v-model="formInline.value.archiveNameSuffix" placeholder="请输入" />
  63. </el-form-item>
  64. </el-col>
  65. <el-col :span="12">
  66. <el-form-item label="并卷规则">
  67. <el-select
  68. v-model="formInline.value.archiveAutoType"
  69. placeholder="请选择"
  70. style="width:400px;"
  71. >
  72. <el-option
  73. v-for="item in ruleTypeList"
  74. :key="item.value"
  75. :label="item.label"
  76. :value="item.value"
  77. />
  78. </el-select>
  79. </el-form-item>
  80. </el-col>
  81. </el-row>
  82. </el-form>
  83. </hc-new-card>
  84. <!-- 新增子目录文件夹 -->
  85. <hc-new-dialog v-model="showaddModal" :title="`${showaddModaltype}子目录文件夹`" widths="50rem" @close="cancelClick" @save="confirmClick">
  86. <el-form :model="addform" label-width="150px" style="flex-wrap: nowrap;">
  87. <el-form-item label="文件目录名称:">
  88. <div class="el-form-item__content">
  89. <el-input v-model="addform.title" />
  90. <!-- <i class="ri-add-circle-line mleft" @click="addinputItem"></i>
  91. <i class="ri-delete-bin-line mleft" @click="delinputItem(index,item)"></i> -->
  92. </div>
  93. </el-form-item>
  94. <el-form-item v-for="(item, index) in addArray" :key="index" label="文件目录名称:">
  95. <div v-if="addArray.length > 0" class="el-form-item__content">
  96. <el-input v-model="item.title" />
  97. <i class="ri-add-circle-line mleft" @click="addinputItem" />
  98. <i class="ri-delete-bin-line mleft" @click="delinputItem(index, item)" />
  99. </div>
  100. </el-form-item>
  101. </el-form>
  102. </hc-new-dialog>
  103. </hc-body>
  104. </template>
  105. <script setup>
  106. import { onMounted, reactive, ref, watch } from 'vue'
  107. import { useAppStore } from '~src/store'
  108. import { archiveTreeUpdate } from '~api/other'
  109. import { getStoreValue, setStoreValue } from '~src/utils/storage'
  110. import HcTree from '~src/components/tree/hc-tree.vue'
  111. import tasksApi from '~api/tasks/data'
  112. import { getArrValue } from 'js-fast-way'
  113. //变量
  114. const useAppState = useAppStore()
  115. const projectId = ref(useAppState.getProjectId)
  116. const contractId = ref(useAppState.getContractId)
  117. const projectInfo = ref(useAppState.getProjectInfo)
  118. const isCollapse = ref(useAppState.getCollapse)
  119. const showaddModal = ref(false)
  120. const showaddModaltype = ref('新增')
  121. let addform = reactive({ title: '' })
  122. const addArray = reactive([])
  123. //监听
  124. watch(() => [
  125. useAppState.getCollapse,
  126. ], ([Collapse]) => {
  127. isCollapse.value = Collapse
  128. })
  129. //渲染完成
  130. onMounted(() => {
  131. setElTreeMenu(1)
  132. getStoragePeriod()
  133. })
  134. //树加载
  135. const treeLoading = ref(true)
  136. const treeNodeLoading = () => {
  137. treeLoading.value = false
  138. }
  139. let formInline = reactive({
  140. value: {
  141. title: '',
  142. },
  143. })
  144. //保管期限
  145. const retentionPeriod = ref([
  146. { label: '永久', value: '1' },
  147. { label: '30年', value: '2' },
  148. { label: '10年', value: '3' },
  149. ])
  150. //获取保管期限
  151. const getStoragePeriod = async () => {
  152. const { error, code, data } = await tasksApi.queryTaskTypeStatus({
  153. typeOrStatus: 'storage_period',
  154. })
  155. //处理数据
  156. if (!error && code === 200) {
  157. retentionPeriod.value = getArrValue(data)
  158. } else {
  159. retentionPeriod.value = []
  160. }
  161. }
  162. const coilsize = ref([
  163. { label: '30mm', value: '30' },
  164. { label: '40mm', value: '40' },
  165. { label: '50mm', value: '50' },
  166. ])
  167. const ruleTypeList = ref([
  168. {
  169. label: '单独组卷',
  170. value: 1,
  171. }, {
  172. label: '分类并卷',
  173. value: 2,
  174. },
  175. {
  176. label: '最高组卷',
  177. value: 3,
  178. },
  179. ])
  180. const onSubmit = () => {
  181. console.log('submit!')
  182. }//新增
  183. const addModalClick = async (type) => {
  184. if (!formInline.value.id) {
  185. window.$message?.warning('请先点选左侧要修改信息的树节点')
  186. return
  187. }
  188. const { code } = await archiveTreeUpdate(formInline.value)
  189. //console.log(res);
  190. if (code == 200) {
  191. window.$message?.success('修改成功')
  192. window?.location?.reload() //刷新页面
  193. }
  194. }
  195. const addinputItem = () => {
  196. addArray.push({ title: '' })
  197. }
  198. const delinputItem = (item, index) => {
  199. addArray.splice(index, 1)
  200. }
  201. //确认
  202. const confirmClick = () => {
  203. showaddModal.value = false
  204. }
  205. const cancelClick = () => {
  206. showaddModal.value = false
  207. }
  208. //删除
  209. const delModalClick = () => {
  210. }
  211. //树相关的变量
  212. const primaryKeyId = ref('')
  213. //子节点树
  214. const nodeItemInfo = ref({})
  215. //自动展开缓存
  216. const treeAutoExpandKeys = ref(getStoreValue('bookExpandKeys') || [])
  217. //项目树被点击
  218. const nodeElTreeClick = ({ node, data, keys, key }) => {
  219. console.log('点击', data)
  220. // treeNodeInfo.value = node
  221. formInline.value = data
  222. setStoreValue('bookExpandKeys', keys)
  223. treeAutoExpandKeys.value = keys || []
  224. }
  225. //设置树菜单数据
  226. const ElTreeMenu = ref([])
  227. const TreeMark = ref(false)
  228. const setElTreeMenu = (contractType) => {
  229. let newArr = []
  230. newArr = [
  231. { icon: 'add-circle', label: '新增', key: 'add' },
  232. { icon: 'draft', label: '编辑', key: 'edit' },
  233. { icon: 'delete-bin', label: '删除', key: 'del' },
  234. ]
  235. ElTreeMenu.value = newArr
  236. }
  237. //树菜单被点击
  238. const ElTreeMenuClick = async ({ key, node, data }) => {
  239. // nodeItemInfo.value = node
  240. // nodeDataInfo.value = data
  241. setTreeMenuDataClick({ key, node, data })
  242. setStoreValue('bookExpandKeys', keys)
  243. treeAutoExpandKeys.value = keys || []
  244. }
  245. //处理菜单被点击数据
  246. const setTreeMenuDataClick = ({ key, node, data }) => {
  247. if (key === 'add') {
  248. addArray.length = 0
  249. addform = { title: '' }
  250. showaddModal.value = true
  251. } else if (key === 'del') {
  252. } else {
  253. addform = data
  254. showaddModaltype.value = '编辑'
  255. showaddModal.value = true
  256. }
  257. }
  258. </script>
  259. <style lang="scss">
  260. @import '~style/archives/bookmark.scss';
  261. </style>