Commit 61e05c2e75bd0f5d277ab14cfd2c1954f22baed4

Authored by 阿宝
1 parent 560c12f2

软件下载

E/system-commandline-sentinel-files/dotnet-suggest-registration-git-credential-manager-core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null 0 → 100644
  1 +Exception during registration:
  2 +System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件。
  3 + 在 System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
  4 + 在 System.Diagnostics.Process.Start()
  5 + 在 System.CommandLine.Invocation.Process.StartProcess(String command, String args, String workingDir, Action`1 stdOut, Action`1 stdErr, ValueTuple`2[] environmentVariables)
  6 + 在 System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<RegisterWithDotnetSuggest>b__10_1>d.MoveNext()
0 7 \ No newline at end of file
... ...
src/views/down/client.vue
... ... @@ -8,9 +8,9 @@
8 8 <div class="page-content">
9 9 <div class="content-top">
10 10 <div class="cont-info">
11   - <img class="logo" :src="info.appImage" alt="" />
  11 + <img v-if="info.appImage" class="logo" :src="info.appImage" alt="" />
12 12 <div>
13   - <p class="name">{{ `${info.appName} ${info.versionName}` }}</p>
  13 + <p class="name">{{ `${info.appName||""} ${info.versionName||""}` }}</p>
14 14 <p class="txt">文件大小:{{ `${info.fileSize}` }}M</p>
15 15 <p class="txt">最近更新:{{ info.modifiedTime }}</p>
16 16 </div>
... ... @@ -27,14 +27,20 @@
27 27 </div>
28 28 <ul class="down-ul">
29 29 <li class="down-li" v-for="item in tableData" :key="item.id">
30   - <span @click="edit(item)">{{ item.configName }}</span>
  30 + <span @click="setConfigForm(item)">{{ item.configName }}</span>
31 31 <el-button plan round @click="getAppDownloadUrl(item.id)"
32 32 >下载</el-button
33 33 >
34 34 </li>
35 35 <li class="down-li">
36 36 <span>自定义软件功能</span>
37   - <el-button plan round icon="el-icon-plus">参数设置</el-button>
  37 + <el-button
  38 + plan
  39 + round
  40 + icon="el-icon-plus"
  41 + @click="setDefaultForm(), (dialogVis = true), (type = 1)"
  42 + >参数设置</el-button
  43 + >
38 44 </li>
39 45 </ul>
40 46 </div>
... ... @@ -46,7 +52,15 @@
46 52 </div>
47 53 </div>
48 54 <div class="form-box">
49   - <el-form :model="formData" :rules="ruleForm" label-width="160px">
  55 + <el-form :model="formData" :rules="ruleForm" label-width="180px">
  56 + <el-form-item label="主菜单设置:" prop="configName" v-if="type==1">
  57 + <el-col :span="12">
  58 + <el-input
  59 + v-model.trim="formData.configName"
  60 + placeholder="请填写配置名称"
  61 + ></el-input>
  62 + </el-col>
  63 + </el-form-item>
50 64 <el-form-item label="主菜单设置:" prop="mainMenu">
51 65 <el-checkbox-group v-model="formData.mainMenu" :max="4">
52 66 <el-checkbox v-for="item in menuList" :label="item" :key="item">{{
... ... @@ -72,26 +86,64 @@
72 86 </el-form-item>
73 87 <el-form-item label="成绩等级设置:">
74 88 <el-col :span="12">
75   - <p class="silde-p">
76   - <el-slider v-model="formData.failedSet"></el-slider
77   - ><span>不及格</span>
78   - </p>
79   - <p class="silde-p">
80   - <el-slider v-model="formData.passSet"></el-slider
81   - ><span>及格</span>
82   - </p>
83   - <p class="silde-p">
84   - <el-slider v-model="formData.goodSet"></el-slider
85   - ><span>良好</span>
86   - </p>
87   - <p class="silde-p">
88   - <el-slider v-model="formData.excellenSet"></el-slider
89   - ><span>优秀</span>
90   - </p>
  89 + <div class="silde-box">
  90 + <p class="silde-p">
  91 + <span class="num" :style="{ left: formData.failedSet + '%' }"
  92 + >{{ formData.failedSet }}%</span
  93 + >
  94 + <el-slider
  95 + v-model="formData.failedSet"
  96 + :show-tooltip="false"
  97 + ></el-slider
  98 + ><span class="txt" :style="{ left: formData.failedSet + '%' }"
  99 + >不及格</span
  100 + >
  101 + </p>
  102 + <p class="silde-p">
  103 + <span class="num" :style="{ left: formData.passSet + '%' }"
  104 + >{{ formData.passSet }}%</span
  105 + >
  106 + <el-slider
  107 + v-model="formData.passSet"
  108 + :show-tooltip="false"
  109 + ></el-slider
  110 + ><span class="txt" :style="{ left: formData.passSet + '%' }"
  111 + >及格</span
  112 + >
  113 + </p>
  114 + <p class="silde-p">
  115 + <span class="num" :style="{ left: formData.goodSet + '%' }"
  116 + >{{ formData.goodSet }}%</span
  117 + >
  118 + <el-slider
  119 + v-model="formData.goodSet"
  120 + :show-tooltip="false"
  121 + ></el-slider
  122 + ><span class="txt" :style="{ left: formData.goodSet + '%' }"
  123 + >良好</span
  124 + >
  125 + </p>
  126 + <p class="silde-p">
  127 + <span
  128 + class="num"
  129 + :style="{ left: formData.excellenSet + '%' }"
  130 + >{{ formData.excellenSet }}%</span
  131 + >
  132 + <el-slider
  133 + v-model="formData.excellenSet"
  134 + :show-tooltip="false"
  135 + ></el-slider
  136 + ><span
  137 + class="txt"
  138 + :style="{ left: formData.excellenSet + '%' }"
  139 + >优秀</span
  140 + >
  141 + </p>
  142 + </div>
91 143 </el-col>
92 144 </el-form-item>
93 145 <el-form-item label="抢答设置:" prop="viesAnswerSet">
94   - <el-radio-group v-model="formData.popupMenu">
  146 + <el-radio-group v-model="formData.viesAnswerSet">
95 147 <el-radio :label="0">倒计时抢答</el-radio>
96 148 <el-radio :label="1">即时抢答</el-radio>
97 149 <el-radio :label="2">老师选择</el-radio>
... ... @@ -105,12 +157,100 @@
105 157 ></el-input-number
106 158 >秒
107 159 </el-form-item>
108   - <el-form-item label="抽答设置:" prop="viesAnswerSet">
  160 + <el-form-item label="抽答设置:" prop="ballotAnswerSet">
109 161 <el-radio-group v-model="formData.ballotAnswerSet">
110 162 <el-radio :label="0">点名抽答</el-radio>
111 163 <el-radio :label="1">随机抽答</el-radio>
112 164 </el-radio-group>
113 165 </el-form-item>
  166 + <el-form-item label="单选题选项默认个数:" prop="singleChoiceNum">
  167 + <el-input-number
  168 + size="small"
  169 + class="count-down count-down2"
  170 + v-model="formData.singleChoiceNum"
  171 + :min="2"
  172 + :max="7"
  173 + :step="1"
  174 + :step-strictly="true"
  175 + ></el-input-number
  176 + >个
  177 + </el-form-item>
  178 + <el-form-item label="多选题选项默认个数:" prop="countdown">
  179 + <el-input-number
  180 + size="small"
  181 + class="count-down count-down2"
  182 + v-model="formData.countdown"
  183 + :min="2"
  184 + :max="7"
  185 + :step="1"
  186 + :step-strictly="true"
  187 + ></el-input-number
  188 + >个
  189 + </el-form-item>
  190 + <el-form-item label="测—单题型默认题数:" prop="singleTypeNum">
  191 + <el-input-number
  192 + size="small"
  193 + class="count-down count-down2"
  194 + v-model="formData.singleTypeNum"
  195 + :min="1"
  196 + :max="100"
  197 + :step="1"
  198 + :step-strictly="true"
  199 + ></el-input-number
  200 + >个
  201 + </el-form-item>
  202 + <el-form-item label="问—倒计时:" prop="askCountdown">
  203 + <el-switch v-model="askCount" @change="askCountChange"> </el-switch>
  204 + <el-input-number
  205 + v-show="askCount"
  206 + size="small"
  207 + class="count-down"
  208 + v-model="formData.askCountdown"
  209 + :min="0"
  210 + :step="1"
  211 + :step-strictly="true"
  212 + ></el-input-number>
  213 + {{ askCount ? "秒" : "" }}
  214 + </el-form-item>
  215 + <el-form-item label="测—倒计时:" prop="viesAnswerSet">
  216 + <el-switch v-model="examsDuration" @change="examsDurationChange">
  217 + </el-switch>
  218 + <el-input-number
  219 + v-show="examsDuration"
  220 + size="small"
  221 + class="count-down"
  222 + v-model="formData.examsDuration"
  223 + :min="0"
  224 + :step="1"
  225 + :step-strictly="true"
  226 + ></el-input-number>
  227 + {{ examsDuration ? "秒" : "" }}
  228 + </el-form-item>
  229 + <el-form-item label="答题结构展示:" prop="displayModel">
  230 + <el-radio-group v-model="formData.displayModel">
  231 + <el-radio :label="0">极简模式</el-radio>
  232 + <el-radio :label="1">全屏模式</el-radio>
  233 + </el-radio-group>
  234 + </el-form-item>
  235 + <el-form-item label="语言设置:" prop="languageSet">
  236 + <el-radio-group v-model="formData.languageSet">
  237 + <el-radio :label="0">中文</el-radio>
  238 + <el-radio :label="1">英文</el-radio>
  239 + </el-radio-group>
  240 + </el-form-item>
  241 + <el-form-item label="其他设置:">
  242 + <el-checkbox-group v-model="formData.otherSet">
  243 + <p>
  244 + <el-checkbox :label="0">答题结束自动显示答题统计</el-checkbox>
  245 + </p>
  246 + <p><el-checkbox :label="1">答题结束自动保存截屏</el-checkbox></p>
  247 + </el-checkbox-group>
  248 + </el-form-item>
  249 + <el-form-item label=" ">
  250 + <el-button type="primary" round @click="saveForm">保存</el-button>
  251 + <el-button round @click="setDefaultForm">恢复默认设置</el-button>
  252 + <el-button round @click="dialogVis = false">取消</el-button>
  253 + </el-form-item>
114 254 </el-form>
115 255 </div>
116 256 </div>
... ... @@ -118,11 +258,44 @@
118 258 </template>
119 259  
120 260 <script>
  261 +const defaultForm = {
  262 + configName: "",
  263 + mainMenu: ["问"],
  264 + popupMenu: 1,
  265 + failedSet: 60,
  266 + passSet: 80,
  267 + goodSet: 90,
  268 + excellenSet: 98,
  269 + viesAnswerSet: 0,
  270 + countdown: 5,
  271 + ballotAnswerSet: 0,
  272 + singleChoiceNum: 4,
  273 + multipleChoiceNum: 4,
  274 + singleTypeNum: 20,
  275 + askCountdown: 30,
  276 + examsDuration: 5400,
  277 + displayModel: 0,
  278 + languageSet: 0,
  279 + otherSet: [],
  280 +};
121 281 export default {
  282 + watch: {
  283 + "formData.askCountdown": function (val) {
  284 + if (val == 0) {
  285 + this.askCount = false;
  286 + }
  287 + },
  288 + "formData.examsDuration": function (val) {
  289 + if (val == 0) {
  290 + this.examsDuration = false;
  291 + }
  292 + },
  293 + },
122 294 data() {
123 295 return {
124 296 page: 1,
125 297 size: 20,
  298 + type: 1, //1-添加;2-修改
126 299 info: {
127 300 appName: "",
128 301 appImage: "",
... ... @@ -131,8 +304,12 @@ export default {
131 304 modifiedTime: "",
132 305 },
133 306 tableData: [],
134   - dialogVis: true,
  307 + dialogVis: false,
  308 + askCount: true,
  309 + examsDuration: true,
  310 + configId:'',
135 311 formData: {
  312 + configName: "",
136 313 mainMenu: ["问"],
137 314 popupMenu: 1,
138 315 failedSet: 60,
... ... @@ -142,8 +319,19 @@ export default {
142 319 viesAnswerSet: 0,
143 320 countdown: 5,
144 321 ballotAnswerSet: 0,
  322 + singleChoiceNum: 4,
  323 + multipleChoiceNum: 4,
  324 + singleTypeNum: 20,
  325 + askCountdown: 30,
  326 + examsDuration: 5400,
  327 + displayModel: 0,
  328 + languageSet: 0,
  329 + otherSet: [],
145 330 },
146 331 ruleForm: {
  332 + configName: [
  333 + { required: true, message: "请填写配置名称", trigger: "blur" },
  334 + ],
147 335 mainMenu: [
148 336 { required: true, message: "请选择主菜单", trigger: "blur" },
149 337 ],
... ... @@ -159,6 +347,41 @@ export default {
159 347 ballotAnswerSet: [
160 348 { required: true, message: "请选择抽答类型", trigger: "blur" },
161 349 ],
  350 + singleChoiceNum: [
  351 + {
  352 + required: true,
  353 + message: "请输入单选题选项默认个数",
  354 + trigger: "blur",
  355 + },
  356 + ],
  357 + multipleChoiceNum: [
  358 + {
  359 + required: true,
  360 + message: "请输入多选题选项默认个数",
  361 + trigger: "blur",
  362 + },
  363 + ],
  364 + singleTypeNum: [
  365 + {
  366 + required: true,
  367 + message: "请输入测—单题型默认题数",
  368 + trigger: "blur",
  369 + },
  370 + ],
  371 + displayModel: [
  372 + {
  373 + required: true,
  374 + message: "请选择答题结构",
  375 + trigger: "blur",
  376 + },
  377 + ],
  378 + languageSet: [
  379 + {
  380 + required: true,
  381 + message: "请选择语言",
  382 + trigger: "blur",
  383 + },
  384 + ],
162 385 },
163 386 menuList: ["问", "测", "析"],
164 387 };
... ... @@ -168,6 +391,81 @@ export default {
168 391 this.appConfigList();
169 392 },
170 393 methods: {
  394 + setConfigForm(obj) {
  395 + let content = JSON.parse(obj.content)
  396 + console.log(content)
  397 + for (let key in this.formData) {
  398 + content[key] ? (this.formData[key] = content[key]) : "";
  399 + }
  400 + this.type = 2;
  401 + this.configId = obj.id,
  402 + this.dialogVis=true
  403 + },
  404 + setDefaultForm() {
  405 + for (let key in this.formData) {
  406 + this.formData[key] = defaultForm[key];
  407 + }
  408 + },
  409 + askCountChange(val) {
  410 + if (val) {
  411 + this.formData.askCountdown = 30;
  412 + } else {
  413 + this.formData.askCountdown = 0;
  414 + }
  415 + },
  416 + examsDurationChange(val) {
  417 + if (val) {
  418 + this.formData.examsDuration = 5400;
  419 + } else {
  420 + this.formData.examsDuration = 0;
  421 + }
  422 + },
  423 + async saveForm() {
  424 + let content = {};
  425 + for (let key in this.formData) {
  426 + if (key != "configName") {
  427 + content[key] = this.formData[key];
  428 + }
  429 + }
  430 +
  431 + if (this.type == 1) {
  432 + this.addAppConfig({
  433 + configName: this.formData.configName,
  434 + content: { ...content },
  435 + });
  436 + } else {
  437 + this.updateAppConfig({
  438 + configId: this.configId,
  439 + content: { ...content },
  440 + });
  441 + }
  442 + },
  443 +
  444 + async addAppConfig(params) {
  445 + const { data, status, info } = await this.$request.addAppConfig({
  446 + ...params,
  447 + });
  448 + if (status == 0) {
  449 + this.$message.success("配置成功");
  450 + this.dialogVis = false;
  451 + this.appConfigList();
  452 + } else {
  453 + this.$message.error(info);
  454 + }
  455 + },
  456 + async updateAppConfig(params) {
  457 + const { data, status, info } = await this.$request.updateAppConfig({
  458 + ...params,
  459 + });
  460 + if (status == 0) {
  461 + this.$message.success("配置成功");
  462 + this.dialogVis = false;
  463 + this.appConfigList();
  464 + } else {
  465 + this.$message.error(info);
  466 + }
  467 + },
  468 +
171 469 async latestVersion() {
172 470 const { data, status, info } = await this.$request.latestVersion();
173 471 if (status == 0) {
... ... @@ -337,21 +635,42 @@ export default {
337 635 display: none;
338 636 }
339 637 }
340   - .silde-p {
341   - display: flex;
342   - align-items: center;
343   - height:36px;
344   - line-height:36px;
345   - & > span {
346   - width: 48px;
347   - margin-left: 10px;
348   - flex-shrink: 0;
349   - }
350   - :deep(.el-slider) {
351   - flex: 1;
352   - }
353   - :deep(.el-slider__runway) {
354   - margin:5px 0;
  638 + .count-down2 {
  639 + margin-left: 0;
  640 + }
  641 + .silde-box {
  642 + position: relative;
  643 + width: 100%;
  644 + height: 60px;
  645 + .silde-p {
  646 + width: 100%;
  647 + position: absolute;
  648 + padding-top: 20px;
  649 + & > span {
  650 + position: absolute;
  651 + width: 48px;
  652 + text-align: center;
  653 + line-height: 18px;
  654 + flex-shrink: 0;
  655 + font-size: 12px;
  656 + }
  657 + :deep(.el-slider) {
  658 + flex: 1;
  659 + }
  660 + :deep(.el-slider__runway) {
  661 + margin: 5px 0;
  662 + }
  663 + :deep(.el-slider__runway) {
  664 + background-color: #409eff;
  665 + }
  666 + .num {
  667 + top: 0;
  668 + transform: translateX(-24px);
  669 + }
  670 + .txt {
  671 + bottom: -20px;
  672 + transform: translateX(-24px);
  673 + }
355 674 }
356 675 }
357 676 }
... ...