CreateFloder.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. <template>
  2. <div>
  3. <div>
  4. <el-dialog v-model="addBoser" :close-on-click-modal="false" title="新建目录" width="30%" @close="diClose">
  5. <el-form :model="boserForm" label-width="120px">
  6. <el-form-item label="目录名称">
  7. <el-input v-model="boserForm.dirName" placeholder="请输入不多于32位字符" maxlength='32' />
  8. </el-form-item>
  9. <el-form-item label="是否使用模板">
  10. <el-switch @change="switchChange" v-model="boserForm.useTemp" active-value="Y" inactive-value="N" />
  11. <el-button v-if="boserForm.useTemp === 'Y'" style="margin-left:10px;" @click="checkTemp" type="info" plain>{{preTempTitle || '点击选择模板'}}</el-button>
  12. </el-form-item>
  13. <!-- <el-form-item label="目录分类">
  14. <el-radio-group v-model="boserForm.dirType">
  15. <el-radio :label="1">公开目录</el-radio>
  16. <el-radio :label="2">组织目录</el-radio>
  17. </el-radio-group>
  18. </el-form-item> -->
  19. <el-form-item label="是否加密" v-if="!(FolderRole && !free )">
  20. <el-switch v-model="boserForm.isEncrypt" active-value="Y" inactive-value="N" />
  21. </el-form-item>
  22. <el-form-item label="加密等级" v-if="!(FolderRole && !free) && boserForm.isEncrypt === 'Y'">
  23. <el-radio-group v-model="boserForm.encryptLevel">
  24. <el-radio :label="item.levelCode" v-for="item in levelList" :key="item">{{item.levelName}}</el-radio>
  25. </el-radio-group>
  26. </el-form-item>
  27. <el-form-item label="私有访问码" v-if="!(FolderRole && !free) && boserForm.isEncrypt === 'Y'&& needCode">
  28. <el-input v-model="boserForm.accessCode" type="password" show-password />
  29. </el-form-item>
  30. </el-form>
  31. <template #footer>
  32. <span class="dialog-footer">
  33. <el-button @click="addBack">取消</el-button>
  34. <el-button type="primary" @click="sureAddBoser">
  35. 确认
  36. </el-button>
  37. </span>
  38. </template>
  39. </el-dialog>
  40. <MenuTempList v-if="showTempList" :showTempList='showTempList' @getTempPreview="getTempPreview" @getAddTempId='getAddTempId' @closeTempList="closeTempList"></MenuTempList>
  41. <PreviewMenuList v-if="showPreTemp" :showPreTemp="showPreTemp" :preTemp="preTemp" @closePreTemp="closePreTemp"></PreviewMenuList>
  42. </div>
  43. </div>
  44. </template>
  45. <script>
  46. import { ref, onMounted, toRef,toRaw,inject ,watch } from 'vue';
  47. import documents from '../../../api/document/document';
  48. import MenuTempList from '@/components/MenuTempList/MenuTempList.vue';
  49. import PreviewMenuList from '@/components/PreviewMenuList/PreviewMenuList.vue';
  50. import { getLevel } from '@/api/level/level.js';
  51. import { ElMessage } from 'element-plus';
  52. import { sm3 ,sm2} from "sm-crypto";
  53. export default {
  54. props: {
  55. folderCase: {
  56. type: Boolean,
  57. required: true
  58. },
  59. oneOrTwo: {
  60. type: Number,
  61. required: true
  62. },
  63. impDirId: {
  64. type: Number,
  65. required: true
  66. },
  67. impSpaceId: {
  68. type: Number,
  69. required: true
  70. },
  71. newDirId: {
  72. type: Number,
  73. required: true
  74. },
  75. newSpaceId: {
  76. type: Number,
  77. required: true
  78. },
  79. thisFolderRole: {
  80. type: Object,
  81. required: true,
  82. default: ()=>{},
  83. },
  84. refreshFile: Function,
  85. getFirstFolder: Function,
  86. },
  87. setup(props, { emit }) {
  88. let { addBack, sureAddBoser, diClose } = toRef(props)
  89. const upFirstFolderData = inject("upFirstFolderData");
  90. let result = props.folderCase
  91. let free = props.oneOrTwo
  92. let spId = props.impSpaceId
  93. let drId = props.impDirId
  94. let newspid = props.newSpaceId
  95. let newdrid = props.newDirId
  96. const FolderRole = props.thisFolderRole
  97. console.log("FolderRole",props);
  98. let addBoser = ref(false)
  99. let boserForm = ref({
  100. dirName: "",
  101. useTemp:'N',
  102. dirType:1,
  103. isEncrypt:"N",
  104. encryptLevel:"L1",
  105. accessCode:''
  106. })
  107. const levelList = ref([])
  108. const needCode = ref(false) // 需要私有码
  109. const showTempList = ref(false)
  110. const tempId = ref()
  111. const showPreTemp = ref(false)
  112. const preTemp = ref()
  113. const preTempTitle = ref('')
  114. function inital() {
  115. console.log(free, 'free');
  116. addBoser.value = result
  117. }
  118. function backTo() {
  119. addBoser.value = false
  120. emit("getChildrenC", addBoser.value)
  121. }
  122. function addFloder() {
  123. if(boserForm.value.useTemp === "Y" && !tempId.value){
  124. ElMessage({
  125. type: "error",
  126. message: "请选择模板"
  127. })
  128. return
  129. }
  130. if (boserForm.value.dirName === '') {
  131. ElMessage({
  132. type: "error",
  133. message: "目录名称不能为空"
  134. })
  135. } else {
  136. if (free === 1) { //一级目录
  137. if (boserForm.value.accessCode === '' && needCode.value) {
  138. ElMessage({
  139. type: "error",
  140. message: "私有访问码不能为空"
  141. })
  142. return
  143. }
  144. if(boserForm.value.useTemp == 'N'){
  145. documents.addDocument(
  146. {
  147. "dirName": boserForm.value.dirName,
  148. "parentId": drId - 0,
  149. "spaceId": spId - 0,
  150. "isEncrypt":boserForm.value.isEncrypt,
  151. "encryptLevel":boserForm.value.isEncrypt == "Y"?boserForm.value.encryptLevel:null,
  152. "accessCode":boserForm.value.accessCode?sm3(boserForm.value.accessCode):''
  153. }
  154. ).then(res => {
  155. if (res.code === 200) {
  156. ElMessage({
  157. message: '添加一级目录成功',
  158. type: 'success',
  159. })
  160. }
  161. addBoser.value = false
  162. emit("getChildrenC", addBoser.value)
  163. props.getFirstFolder()
  164. })
  165. }else{
  166. documents.addDocumentByTemp(
  167. {
  168. "dirName": boserForm.value.dirName,
  169. "parentId": drId - 0,
  170. "spaceId": spId - 0,
  171. "isEncrypt":boserForm.value.isEncrypt,
  172. "encryptLevel":boserForm.value.isEncrypt == "Y"?boserForm.value.encryptLevel:null,
  173. "accessCode":boserForm.value.accessCode?sm3(boserForm.value.accessCode):''
  174. },tempId.value
  175. ).then(res => {
  176. if (res.code === 200) {
  177. ElMessage({
  178. message: '添加一级目录成功',
  179. type: 'success',
  180. })
  181. }
  182. addBoser.value = false
  183. emit("getChildrenC", addBoser.value)
  184. props.getFirstFolder()
  185. })
  186. }
  187. console.log('1111', 1111)
  188. } else { //二级目录
  189. let query = {}
  190. if(FolderRole){ // 如果是父级有权限就直接用父级
  191. query={
  192. "dirName": boserForm.value.dirName,
  193. "parentId": newdrid - 0,
  194. "spaceId": newspid - 0,
  195. "isEncrypt":"Y",
  196. "encryptLevel":FolderRole.levelCode,
  197. "accessCode":FolderRole.accessCode,
  198. "remark":'extend'
  199. }
  200. console.log('query',query);
  201. console.log('FolderRole',FolderRole);
  202. }else{
  203. if (boserForm.value.accessCode === '' && needCode.value) {
  204. ElMessage({
  205. type: "error",
  206. message: "私有访问码不能为空"
  207. })
  208. return
  209. }
  210. query={
  211. "dirName": boserForm.value.dirName,
  212. "parentId": newdrid - 0,
  213. "spaceId": newspid - 0,
  214. "isEncrypt":boserForm.value.isEncrypt,
  215. "encryptLevel":boserForm.value.isEncrypt == "Y"?boserForm.value.encryptLevel:null,
  216. "accessCode":boserForm.value.accessCode?sm3(boserForm.value.accessCode):''
  217. }
  218. }
  219. if(boserForm.value.useTemp == 'N'){
  220. documents.addDocument(
  221. query
  222. ).then(res => {
  223. if (res.code === 200) {
  224. ElMessage({
  225. message: '添加成功',
  226. type: 'success',
  227. })
  228. }
  229. addBoser.value = false
  230. emit("getChildrenC", addBoser.value)
  231. props.refreshFile()
  232. })
  233. }else{
  234. documents.addDocumentByTemp(
  235. query,tempId.value
  236. ).then(res => {
  237. if (res.code === 200) {
  238. ElMessage({
  239. message: '添加成功',
  240. type: 'success',
  241. })
  242. }
  243. addBoser.value = false
  244. emit("getChildrenC", addBoser.value)
  245. props.refreshFile()
  246. })
  247. }
  248. }
  249. }
  250. }
  251. const getLevelList = async ()=>{
  252. const res = await getLevel()
  253. if(res.rows){
  254. levelList.value = res.rows
  255. }
  256. // console.log('level',res);
  257. }
  258. const switchChange = (val)=>{
  259. if(val === "Y"){
  260. showTempList.value = true
  261. }else{
  262. preTempTitle.value = ''
  263. tempId.value = null
  264. showTempList.value = false
  265. }
  266. }
  267. const closeTempList = ()=>{
  268. showTempList.value = false
  269. }
  270. const closePreTemp = ()=>{
  271. showPreTemp.value = false
  272. }
  273. const getAddTempId = (id,name)=>{
  274. tempId.value = id
  275. preTempTitle.value = name
  276. showTempList.value = false
  277. }
  278. const getTempPreview = (item)=>{
  279. showPreTemp.value = true
  280. preTemp.value = JSON.parse(item.tmplContent)
  281. }
  282. const checkTemp = ()=>{
  283. showTempList.value = true
  284. }
  285. //监听加密等级
  286. watch(() => boserForm.value.encryptLevel, (newValue, oldValue) => {
  287. const thisRole = levelList.value.find(item=>item.levelCode == newValue)
  288. console.log('thisRole',thisRole);
  289. if(thisRole.roles.l0700){
  290. needCode.value = true
  291. }else{
  292. needCode.value = false
  293. }
  294. }, {
  295. deep: true
  296. });
  297. onMounted(() => {
  298. inital()
  299. getLevelList()
  300. })
  301. return {
  302. addBoser,
  303. boserForm,
  304. inital,
  305. addBack: backTo,
  306. sureAddBoser: addFloder,
  307. diClose: backTo,
  308. spId,
  309. drId,
  310. newdrid,
  311. newspid,
  312. levelList,
  313. getLevelList,
  314. FolderRole,
  315. free,
  316. needCode,
  317. switchChange,
  318. showTempList,
  319. closeTempList,
  320. getAddTempId,
  321. tempId,
  322. getTempPreview,
  323. showPreTemp,
  324. preTemp,
  325. closePreTemp,
  326. preTempTitle,
  327. checkTemp
  328. }
  329. },
  330. components:{
  331. MenuTempList,
  332. PreviewMenuList
  333. }
  334. }
  335. </script>
  336. <style lang="scss" scoped></style>